Newsgroup: it.comp.www.php
Titolo: DISTINCT

 
Ciao,
ho il seguente script per estrarre dei dati da una tabella mysql:
$sql="SELECT DISTINCT cognome FROM  reports ";
$risultati_mysql=mysql_query($sql,$connessione);
$num_righe=mysql_num_rows($risultati_mysql);
if ($num_righe == "0") {
 echo " ";
 }
 else
 {
while ($riga=mysql_fetch_array($risultati_mysql))
 {
$id=$riga["id"];
$nome=$riga["nome"];
$cognome=$riga["cognome"];
$to_ore=$riga["t_ore"];
echo "<br>$nome $cognome $to_ore<br><br>";
}
}
IL mio problema che facendo l'echo mi visualizza solo i cognomi, invece io 
vorrei che mi visualizzasse anche il nome e le ore associate alla riga. 
Dovrei usare sempre uncomando distinct perchč ci possono essere piů volte la 
stessa persona nella tabella ed  io vorrei che me la visualizzasse solo una 
volta.
Come posso fare?
Ciao
Marco

 visualizzasse solo una volta.
Per quale motivo ti serve di visualizzare solo 1 record? Quale record
ti serve di visualizzare (ad esempio quello con la data piu'
aggiornata)?
-- 
I am what I am, I do what I can
Do. Or do not. There is not try.

 aggiornata)?
Mi serve selezionare solo un cognome per riga poichè ci sono più righe delle 
tabelle che hanno lo stesso cognome e sono la stessa persona.
Però vorrei che per ogni persona mi visualizzasse anche gli altri dati e 
quindi le altre colonne 

 altri dati e quindi le altre colonne 
Non hai ancora risposto alle due domande che ti ho fatto.
[mi quoto]
Per quale motivo ti serve di visualizzare solo 1 record? Quale record
ti serve di visualizzare (ad esempio quello con la data piu'
aggiornata)?
[/mi quoto]


 [/mi quoto]
Mi serve visualizzare quello con la data che va dal primo del mese 
all'ultimo del mese.

 all'ultimo del mese.
Allora inserisci una clausola WHERE in modo da filtrare solamente quei
record.


 record.
mi potresti dire come deve essere la clausola per l'acro di tempo che mi 
serve.
Grazie 

 mi serve.
http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#id31887
56 [ 
http://tinyurl.com/9yxb8
 ]




Dipende da come memorizzi le date nel campo...
Se usassi le date serializzate (ma non credo...) ti basterebbe una cosa 
del genere (a memoria sul postgres...)
WHERE data LIKE '200512%'
per avere tutto il mese di dicembre senza sbatterti a controllare quanti 
giorni ha un mese e quanti ne ha un altro o altri calcoli complessi...
--
~omar

 complessi...
WHERE YEAR(data) = 2005 AND MONTH(data) = 12
Calcoli veramente complessi ...



sono campi DATE 

 Calcoli veramente complessi ...
E' evidente che l'utilizzo della data seriale, e relativi vantaggi 
nell'applicazione pratica della consultazione dei record, non ti sono noti.
--
~omar

 sono campi DATE 
Non avevo dubbi...
allora segui il consiglio che ti ha dato setec qualche messaggio fa...
--
~omar

 Calcoli veramente complessi ...
Questo può essere un buon metodo, solo che vorrei che mi facesse un distinct 
perchè ci sono varie righe con le stesse persone. 

 allora segui il consiglio che ti ha dato setec qualche messaggio fa...
ok il mio problema rimane sul come fare il distinct e far visualizzare tutti 
i campi 

 noti.
Sara', ma a te sfugge totalmente il motivo per cui esistano dei campi
tipizzati all'interno di MySQL ...


 distinct perchh ci sono varie righe con le stesse persone. 
Siamo al punto di partenza.
Hai dei record con nome, cognome, data ed ora, giusto?
Tu voi selezionare solo quei record che hanno la data del mese di
dicembre (ad esempio), giusto?
Ma alla fine vuoi solo 1 record per ogni persona, giusto?
Ci possono essere record multipli per ogni persona nell'arco dello
stesso mese?
Se la risposta e' si, devi comunque trovare un modo per selezionare
SOLO 1 record per persona, ed anche a livello logico devi volere
determinati valori se vuoi un distinc, altrimenti tanto vale la pena
fare solo il distinc per nome e cognome e filtrare per data.


 tipizzati all'interno di MySQL ...
Certo che lo so!
Per essere utilizzati da quelli come te.
--
~omar

 i campi 
Ma sei sicuro che ti serva il DISTINCT per ottenere i record che desideri?
Puoi fare un esempio concreto di quello che deve sputare fuori la query?
-- 
~omar


Si, tutto giusto,
ma posso fare un distinct per più campi, ad esempio nome, cognome e ora se 
si, come lo formulo?
Grazie ancora 

 Per essere utilizzati da quelli come te.
Continui a suggerire di utilizzare pratiche e strumenti sbagliati
perche' non sai usare quelli corretti, vero?


 ora se si, come lo formulo?
http://dev.mysql.com/doc/refman/4.1/en/select.html#id2895012
SELECT DISTINCT cognome, nome, etc. etc.
Tieni presente che se la condizione NON filtra i record in modo da
restituire una sola copia nome/cognome potresti ritrovarti dei
duplicati nei risultati (a causa, ad esempio, di diverse date/ore), in
tal caso dovrai usare PHP per fare ulteriori filtri o migliorare la
clausola WHERE.


 perche' non sai usare quelli corretti, vero?
[miquoto]
E' evidente che l'utilizzo della data seriale, e relativi vantaggi 
nell'applicazione pratica della consultazione dei record, non ti sono noti.
[/miquoto]
Anche se ti hanno zittito in due questa settimana, a proposito dei tuoi 
sedicenti metodi corretti (ROFTL...), rimani sempre il mio eroe...
--
~omar

 sempre il mio eroe...
E tu continui a NON sostenere le tue affermazioni con alcunche' al
difuori delle tue illazioni.
