Originariamente inviato da neroux
Non si può fare (almeno in modo facile). Potresti salvare tutto in memoria e poi lavorare su questo. Ma come già scritto il modo più intuitivo sarebbe fare tutto nel primo while (non capisco perché non debba essere possibile).
Comunque, se ci facessi vedere il query sarebbe molto più facile
Ecco come ho fatto io; funziona tutto ma non mi piace perchè devo fare due letture e al momento non mi viene in mente nulla su come ottimizzare i dati e renderli compatibili su quello che voglio fare io; in pratica devo costruirmi la prima parte fatta in questo modo come una tabella (testata con tutte le categorie nel periodo): mese-anno=2=3=4=5=... e poi i valori sotto nel seguente formato corrispondente : 10-2012=20=30=40=50=.. e così via per altri mesi con i valori.
Codice PHP:
$query = "SELECT distinct categoria FROM mytab WHERE categoria = $id and DATE_FORMAT(data_lettura, '%Y-%m') between " ."'".$data_da."'"."and" ."'".$data_a."'". " order by categoria";
$risultato = $db->loadQuery($query);
$prima_volta = 0;
while ($fetch=mysql_fetch_array($risultato)) {
if($prima_volta == 0){
$stringa .= "mese-anno" ."=". $fetch['categoria'];
$prima_volta = 1;
}else{
$stringa .= "=". $fetch['categoria'];
}
}
$query = "SELECT distinct DATE_FORMAT(data_lettura, '%m-%Y') as data_store, categoria, sum(valore) as valore FROM mytab WHERE id_pass = $id and DATE_FORMAT(data_lettura, '%Y-%m') between " ."'".$data_da."'"."and" ."'".$data_a."'". " Group by categoria, DATE_FORMAT(data_lettura, '%Y-%m') order by data_store, categoria ";
$risultato = $db->loadQuery($query);
$periodo_old = "";
while ($fetch=mysql_fetch_array($risultato)) {
if($fetch['data_store'] != $periodo_old){
$periodo_old = $fetch['data_store'];
$stringa .= " ";
$stringa .= $fetch['data_store'];
}
$stringa .= "=". $fetch['valore'];
}
$stringa .= " ";
Grazie gentilissimo per aver risposto