Newsgroup: it.comp.www.php
Titolo: Ricerca nel DB con due ordinamenti

Ho la necessità di estrapolare dei dati all'interno del DB 
ordinati sia per anno decrescente e sia per ID decrescente.
o usato la sequente istruzione per quanto riguarda l'ordinamento 
per anno e funziona bene:
$sql = "SELECT * FROM tab_dati WHERE `cliente`='$cliente' AND 
`anno`<='$anno' AND `id`!='$id' ORDER BY `anno` DESC LIMIT 1";
il problema si presenta quando aggiungo anche per ID decrescente 
in questo modo:
$sql = "SELECT * FROM tab_dati WHERE `cliente`='$cliente' AND 
`anno`<='$anno' AND `id`!='$id' ORDER BY `anno` AND `id` DESC 
LIMIT 1";
non funziona mi da errore.. a questo punto immagino che non si 
possa effettuare un doppio ordinamento, ma come posso fare dal 
momento che ho questa necessità?
Grazie per ogni eventuale aiuto
Marco
--  
Postato da Virgilio Newsgroup: scopri i nuovi gruppi 
Eros, foto e video a 
http://newsgroup.eros.virgilio.it

 LIMIT 1";
Gli ordini multipli si fanno cosi
ORDER BY
	camopo1 ASC
	, campo2 DESC
	, campo3 ASC
e cosi via.
senza AND ma semplicemente con virgole.

 senza AND ma semplicemente con virgole
Grazie Alessandro, ti vorrei chiedere un altra cosa, io ho la 
necessità che rispetto al record che sto visualizzando, il 
record estrapolato deve essere di anno inferiore o uguale, di id 
diverso (per evitare il ripetersi), dello stesso cliente, 
ordinato per anno. Mi è sorto un problema che non riesco a 
risolvere, quando ho due id diversi ma dello stesso anno il 
programma mi entra in loop perche riconosce l'anno uguale e 
quindi va bene, ma riconosce anche un id diverso e quindi mi si 
blocca tra i due record senza passare alle visualizzazioni 
successive. Come posso fare?
Spero di essere stato chiaro..
Grazie,


 Spero di essere stato chiaro..
Sinceramente no.
Cosa devi fare?

esempio:
tabella dati
anno 1998 id 1
anno 1989 id 2
anno 1998 id 4
anno 2000 id 3
Mettiamo di trovarci sull'id 3 perche è dell'anno più recente 
(2000), chiedo il lavoro precedente (anno<=2000, id!=3 e id 
DESC), naturalmente mi trova l'id 4, vado ancora indietro mi 
trova l'id 1, ma se vado ancora indietro mi torna all'id 4 
invece di passarmi al 2 questo perchè entrano in loop i due id 
dello stesso anno.
Come posso fare per risolvere questo problema?
Grazie mille per l'aiuto,


 Come posso fare per risolvere questo problema?
Indietro in che senso scusa?
Se tu ordini cosi
ORDER BY anno DESC, id DESC
dovrebbe farti cosi:
2000, 3
1998, 4
1998, 1
1989, 2
non è quello che vuoi?

 non è quello che vuoi?
è quello che voglio ma non funziona in questo modo, perchè 
quando arriva all'anno 98 va in loop tra i due record del 98 e 
non scende all'89. questa è la query usata:
$sql = "SELECT * FROM tab_dati WHERE `cliente`='$cliente' AND 
`anno`<='$anno' AND `id`!='$id' AND ORDER BY id DESC LIMIT 1";
se tu vedi bene la query ti accorgi che è normale che si blocchi 
su due valori dello stesso anno, ma non riesco a capire come 
risolvere il problema..


 risolvere il problema..
Guardando bene la query mi accorgo che è sbagliata.
AND ORDER BY
non ha senso. cosa significa quel AND?
Comunque non hai usato l'order che ti ho dato io.
Prova:
"SELECT * FROM tab_dati WHERE `cliente`='$cliente' AND
`anno`<='$anno' AND `id`!='$id' ORDER BY anno DESC, id DESC";
che dovrebbe tirar fuori tutti i record ordinati come vuoi tu, ad 
eccezione di quello con id=$id. Butti tutto in un array con qualcosa tipo
while ( $dati = mysql_fetch_assoc($result) )
e dovresti essere ok.
Se così non fosse, allora non ho capito cosa stai cercando di fare.