PDA

View Full Version : Caso misterioso su SQL devo fare un estrazione doppia con &


race2
02-02-2002, 15:16
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???

cionci
02-02-2002, 16:11
Mmmmhh...mi fai vedere come deve apparire la tabella risultato della query che vuoi ?

madmax
03-02-2002, 11:04
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

race2
03-02-2002, 13:05
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.

cionci
03-02-2002, 15:11
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 è...

race2
03-02-2002, 17:11
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" ???

cionci
04-02-2002, 01:02
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 :)

race2
04-02-2002, 06:42
Ma mi da errore, argomento sql non valido!!!
Ma lo hai provato???

cionci
04-02-2002, 10:00
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

race2
04-02-2002, 12:46
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!

cionci
04-02-2002, 13:43
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...