[risolto] MySql, SELECT, GROUP BY e COUNT

  • Creatore Discussione Creatore Discussione Gian06
  • Data di inizio Data di inizio

Gian06

Utente Attivo
13 Set 2010
46
0
6
Ciao a tutti, ho una difficoltà nel realizzare qualcosa di simile:

Ho una tabella in MySql così fatta:

mytable: col1 col2 col3

tizio caio sempronio
caio caio
sempronio tizio
pippo pippo pippo
tizio
ecc.

Quello che vorrei in output è il seguente:

col1 col2 col3 totale
tizio 2 1 3
caio 1 2 3
sempronio 1 1 2
pippo 1 1 1 3

ecc.

Dovrebbe essere una combinazione di SELECT, GROUP BY e COUNT, ma non riesco proprio a capire come fare.

Con il codice che segue:
PHP:
$result = mysql_query("SELECT col1, COUNT(*) FROM mytable GROUP BY col1");
		while($row=mysql_fetch_array($result))  
		{  
                  echo $row['col1'] . " ";  
                  echo $row['COUNT(*)'] . "<br> ";  
		}
ottengo come risultato:
tizio 2
caio 1
sempronio 1
pippo 1
ma non riesco a fare più di così

Qualcuno può aiutarmi?
Grazie
 
Ultima modifica di un moderatore:
MySql, SELECT, GROUP BY e COUNT

Scusate, mi sono saltate le tabulazioni.
Se non risulta chiaro l'esempio vi posto qualcosa di più chiaro
 
ciao
se non ho capito male, prendo ad es 'tizio'
tu vorresti in pratica che

tizo è citato due volte nella col1, una volta in col2, (0 volte in col3), per un totale di 3 volte

è così?
se si non so se puoi risolvere solo con una query.
comunque eventualmente spiega meglio che provo a pensarci
 
ciao
prova questo script, l'ho testato e funziona
dai commenti dovresti capire cosa ho fatto
PHP:
<?php
// tuoi dati di connessione
$campi=array('col1','col2','col3');//nomi dei campi in un array
//estraggo tutti i nomi presenti
$query=mysql_query("SELECT * FROM mytable");//estraggo tutti i nomi
while($riga=mysql_fetch_array($query)){
	foreach($campi as $campo){//ciclo i campi
		$nomi[]=$riga[$campo];//creo un array con tutti i nomi, qui ci saranno anche duplicati
	}
}
$unici = array_unique($nomi);//riduco l'array a solo valori unici
sort($unici);//e li ordino in ordine alfabetico, se serve
//ciclo i nomi e i campi
foreach($unici as $nome){//ciclo per nome
	foreach($campi as $campo){// e ciclo per nome campo
		//cosstiusco la querystringa e interrogo
		$query=mysql_query("SELECT $campo , COUNT(*) as quanti FROM mytable WHERE $campo='$nome' GROUP BY $campo");
		$riga=mysql_fetch_array($query);
		//costruisco un array multidimensionale es. $presenze['tizio']['col2']
		//e come valore il conteggio delle presene
		$presenze[$nome][$campo]=(int)$riga['quanti'];//lo forzo a intero
	}
	//calcolo il totale per quel nome di presenze
	$presenze[$nome]['totale']=array_sum($presenze[$nome]);
}
//e visualizzo i risultati
//qui metto un var_dump, a te fare la grafica di presentazione
echo "<pre>";
var_dump($presenze);
echo "</pre>";
?>

guarda che per fare prima ho usato le vecchie istruzioni mysql, ma tu passa a mysqli o alla classe pdo
 
MySql, SELECT, GROUP BY e COUNT

Geniale, borgo, grazie!
Funziona, e con piccoli aggiustamenti l'ho adattato facilmente al mio problema reale!
 

Discussioni simili