Newsgroup: it.comp.www.php
Titolo: Consiglio: Miglior approccio per ridurre numero query su db.

Dovrei visualizzare il contenuto di una tabella di un db ipoteticamente così 
composta
nome  città     anno
Mario Milano 970
Giulio Roma   975
Giulio  Firenze 976
Filippo Napoli 981
Filippo Milano 980
Inizialmente la devo visualizzare tutta, e quindi nessun problema con una 
PRIMA query del tipo:
$dati = mysql_query("SELECT * from miei_dati ORDER BY id;");
while ($row = mysql_fetch_array($ml_dati )) {
echo "...";
}
Successivamente nella stessa pagina devo visualizzare la stessa tabella ma 
"manipolata".
Cioè ogni nome dovrà comparire solo una volta (quindi avrò, nell'esempio di 
cui sopra, solo 3 righe) ma, nel caso di ripetizioni nella colonna "nome" 
(es.: Giulio e Filippo) una volta accertata la ripetizione stessa, dovrei 
visualizzarne una riga o l'altra (es.: Giulio Roma   975 o Giulio  Firenze 
976) a seconda di alcuni criteri.
Ora potrei fare delle query ad hoc usando il WHERE sulla colonna "nome", ma 
così facendo dovrei prima calcolarmi quanti nomi "unici" ci sono, stiparli 
un array e poi, ciclando l'array, eseguire per ogni suo elemento una query 
specifica.
Mi sembra un metodo un pò macchinoso, secondo voi c'è un'alternativa più 
funzionale?

 cui sopra, solo 3 righe) ma, nel caso di ripetizioni nella colonna "nome" 
Potresti usare la clausola "GROUB BY nome"
Ciao
Marco
-- 
Attenzione: indirizzo e-mail non valido
(per rispondere togliere gli alcolici e il suffiso invalid)
Invalid e-mail address.
(Remove alcohol reference and "invalid" suffix for responding)

 funzionale?
Sě, cerca di fare tutto in SQL.
Senza sapere quali sono questi fantomatici "criteri" č impossibile
essere piů precisi, comunque secondo me GROUP BY e CASE...WHEN...END
sono tuoi amici.
	Y.

 sono tuoi amici.
Grazie per le veloci risposte. ;)
I criteri sono "esterni" ai dati presenti nel db, si basa su altre 
elaborazioni di variabili di sessione (ad esempio), ma da quello che 
suggerite mi viene da pensare che se riuscissi ad archiviare gli elementi 
che formano questi "criteri" nella tabella del db con le istruzioni di cui 
sopra dovrei cavermela al meglio, ho capito bene? 

 sopra dovrei cavermela al meglio, ho capito bene? 
No. La logica dei criteri la scrivi in SQL. Le variabili di sessione
ecc. le passi al SQL come costanti.
	Y.


Ok, era questo che intendevo. ;) 

Sto cercando di metter in pratica quanto mi avete suggerito ma non riesco a 
capire.
Stando all'esempio iniziale:
nome  città     anno
Mario Milano 970
Giulio Roma   975
Giulio  Firenze 976
Filippo Napoli 981
Filippo Milano 980
Se io facessi una query tipo:
$query= mysql_query("SELECT *, MAX(anno) FROM mia_tab GROUP BY nome ");
Non dovrei ottenere:
Mario Milano 970
Giulio  Firenze 976
Filippo Napoli 981
?

meldrus wrote:

Un consiglio: dimentica l'asterisco e specifica esplicitamente le
colonne che ti interessano.
	Y.

 colonne che ti interessano.
Proverò Grazie. 


no, otterrai errore.
per ottenere che dici devi aggiungere il group by anche della città.
Ed ovviamente togliere l'* e mettere solo i campi raggruppati (e quelli 
con funzione, come il max(anno))
In ogni caso le query falle sempre prima su db, una volta che vedi che 
girano come ti aspetti le metti nel codice.
-- 
Z.