|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Aug 2000
Messaggi: 1209
|
Caso misterioso su SQL devo fare un estrazione doppia con &
Dato questa tabella del database:
------------------------------------------------------ | id | codice_cliente | data_ordine | ordine ------------------------------------------------------ 1 | xxx | 20020201 | eekjek 2 | xxx | 20010102 | erjkeki 3 | xxx | 20020103 | leklelgi 4 | yyy | 20020204 | lllmclgg 5 | yyy | 20010105 | lelemlo 6 | yyy | 20020106 | ekrllluu 7 | zzz | 20020207 | wlwmff 8 | zzz | 20010108 | wàòòfò 9 | zzz | 20020109 | òeòeee ------------------------------------------------------ quindi ho: x,y,z che sono 3 ditte differenti e ho 3 date differenti per ditta, e infine la cella "ordine" dove ho inserito frasi astratte per simulare un ordine. Vogli fare questa query: $sql = "select distinct codice_cliente from ordinazioni where codice_cliente"; Cioe', con questa query voglio ottenere: una lista di codici_cliente che non ce ne siano piu' di uno per nome e questo lo faccio con "distinct", di seguito ad ogni nome voglio tutte le 3 date e i 3 ordini che lo seguono. ...ma cosi facendo non mi fa estrarre i campi "data" e "ordine" ditemi come devo fare??? |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Mmmmhh...mi fai vedere come deve apparire la tabella risultato della query che vuoi ?
|
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Oct 1999
Messaggi: 7
|
Beh, è ovvio. L'hai detto tu: metti distinct per avere una sola riga per ogni cliente. Quindi non puoi contemporaneamente avere 3 righe!
Eventualmente puoi mettere nella select, dopo il distinct, anche le altre colonne delle quali hai bisogno, come la data è la descrizione. Se non hai doppie date/descrizioni dovrebbe essere quello che vuoi, ma dovresti allegare anche un prototipo del risultato che chiedi, altrimenti è difficile capire! ciao |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Aug 2000
Messaggi: 1209
|
Quando si usa distinct non possiamo piu' estrarre altri campi al di fuori del campo che indica il distinct,vorrei sapere come fare per estrarre tutti i campi ma con distinct nel "codice_cliente" , chiaramente tramite una clausola while.
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Prima fai :
Select distinct codice_cliente From tabella Per ogni codice devi fare : Select * From tabella Where codice_cliente = ..... (uno di quelli estratti sopra) Anche se non capisco perchè vuoi farlo in due passaggi quando basta fare una query del genere per ottenerli in ordine (se è quello lo scopo)... Select * From Tabella Order By codice_cliente Asc Se il tuo scopo è un'altro allora non ho capito qual è... |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Aug 2000
Messaggi: 1209
|
Vi ridico quello che voglio ottenere:
1) Voglio ottenere una lista di "codice_cliente" che non si ripetano gli identici, e questo lo faccio con "distinct". 2) Poi se la data contenuta nella tabella e' superiore alla data di oggi, dovra visualizzare il "codice_cliente", altrimenti no. ecco la mia query: $data_oggi = "20020203"; $sql = "select distinct id_cliente from ordinazioni where id_cliente"; $query = mysql_query($sql, $link); while($ris = mysql_fetch_array($query)) { $data_ordine = $ris["data_ordine"]; if($data_ordine >= $data_oggi) { echo"$id_c <br>"; } } Ma il problema e' che avendo usato "distinct" nel campo "id_cliente", non posso estrarre il campo "data_ordine" per confrontarlo con la "data_oggi". Mi sembra tutto chiaro...!!! Come faccio per estrarre il campo "data_ordine" mantenendo la funzione di "distinct" ??? |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Oh...ora è tutto chiaro...
Select distinct codice_cliente From Tabella Where codice_cliente in (Select codice_cliente From Tabella Where data_ordine > $data_ordine) Ciao ![]() |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Aug 2000
Messaggi: 1209
|
Ma mi da errore, argomento sql non valido!!!
Ma lo hai provato??? |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
No...
Azzo...è vero...MySql non supporta le query annidate... E poi sono anche stupido...basta fare così... Che testa... Select distinct codice_cliente From Tabella Where data_ordine > $data_ordine |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Aug 2000
Messaggi: 1209
|
NO!
Fino a che usi "distinct" non potrai mai selezionare altri campi al di fuori di quello selezionato dal "distinct", mentre il mio problema lo ho risolto in questo modo: $sql = "select * from ordinazioni where id_cliente group by id_cliente order by id_cliente asc"; Grazie comunque, ciao! |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Nono...infatti la selezione avviene sul solo campo id_cliente, soltanto che puoi usare il where su qualsasi campo...
Il distinct fa non genera tuble (riche) doppie del risultato solo dopo che il risultato è stato generato... |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:02.