- Home
- Categorie
- Coding e Sistemistica
- PHP
- Order by (SQL)
-
Order by (SQL)
Buonasera a tutti, avrei un problema che non ricordo come risolvere.
Dovrei fare un elenco di dati presi dal db ordinandoli prima per un certo dato DESC e in caso che siano uguali per un secondo dato DESC.
ho fatto così:
$query=mysql_query("select * from tabella order by campo1 DESC, campo2 DESC"); while...
ma non ho ottenuto il risultato che speravo.
Qualcuno puà aiutarmi?
Grazie in anticipo
-
spiegati meglio...
la query è corretta e mi sembra strano che non funzioni...
-
Ti faccio vedere direttamente la pagina dove ho il problema
http://www.skaweb.it/concorsi/1/classifica/
come vedi a parità di punti dovrebbe mettermeli in ordine di tempo DESC invece sono tutti mischiati.
-
a parità di punti il tempo non dovrebbe essere ASC? così sta sopra chi ci ha messo meno...o sbaglio?
ad ogni modo sarebbe ottimo se postassi direttamente il codice PHP cui fai fare la query e poi il ciclo. Perchè ti assicuro che ho provato in locale ed andava..
oppure attendiamo pareri + illuminanti
-
Ho messo ASC invece che DESC (non mi ero accorto di questo errore) e per la prima posizione me li mette in ordine, nelle altre me li mette DESC..
Ecco il codice, speriamo che sia di aiuto.
<?php $query_partecipanti=mysql_query("select * from Concorso_Partecipante where ID_Concorso='$id_concorso' order by Risultato DESC, Tempo ASC"); while($row_partecipanti=mysql_fetch_array($query_partecipanti)){ $posizione=++$posizione; echo"<b>$posizione</b>: $row_partecipanti[Partecipante] con <b>$row_partecipanti[Risultato]</b> punti in <b>$row_partecipanti[Tempo]</b> secondi<br />"; } ?>
-
Ho messo ASC invece che DESC (non mi ero accorto di questo errore) e per la prima posizione me li mette in ordine, nelle altre me li mette DESC..
Ecco il codice, speriamo che sia di aiuto.
<?php $query_partecipanti=mysql_query("select * from Concorso_Partecipante where ID_Concorso='$id_concorso' order by Risultato DESC, Tempo ASC"); while($row_partecipanti=mysql_fetch_array($query_partecipanti)){ $posizione=++$posizione; echo"<b>$posizione</b>: $row_partecipanti[Partecipante] con <b>$row_partecipanti[Risultato]</b> punti in <b>$row_partecipanti[Tempo]</b> secondi<br />"; } ?>
-
Forse è un caso, ma i tempi sono ordinati in ordine ascii (come si fa con le stringhe).
Nel database la colonna tempo è NUMBER o VARCHAR ?
-
varchar(15)
perchè cambia qualcosa nell'ordine in base al tipo di campo?
-
Sì.
Le stringhe vengono ordinate in ordine ascii (che coincide con l'alfabetico, i numeri vengono prima delle minuscole e poi delle maiuscole, mi pare), i numeri e le date vengono ordinati secondo l'ordine "intuitivo".
Comunque per risolvere il tuo problema dovresti convertire tempo in decimale.
Mi pare che si faccia: invece di select tempo, campo2...
select cast (tempo, decimal), campo 2(non puoi usare l'asterisco ma elencare i campi)
-
Ho letto qua sull'uso di cast:
http://database.html.it/guide/lezione/2453/operatori-e-funzioni-i/
non capisco come poter mettere all'interno di uno stesso SELECT sia il CAST che il resto degli operatori che mi servono.
-
Prova a sostituire la riga che hai tu con questa:
$query_partecipanti=mysql_query("select * from Concorso_Partecipante where ID_Concorso='$id_concorso' order by Risultato DESC, CAST (Tempo as numeric) ASC");
-
nulla mi da un warning
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /web/htdocs/www.skaweb.it/home/concorso_classifica.php on line 40
-
e con questo codice ti funziona?
$query_partecipanti=mysql_query("select * from Concorso_Partecipante where ID_Concorso='$id_concorso' order by Risultato DESC, CAST (Tempo as SIGNED) ASC");
-
sempre lo stesso errore
pazienza lascerò così.
-
hai provato anche a togliere lo spazio tra CAST e (Tempo?
scrivendo cioè
$query_partecipanti=mysql_query("select * from Concorso_Partecipante where ID_Concorso='$id_concorso' order by Risultato DESC, CAST(Tempo as SIGNED) ASC");
scusa ma sì va per tentativi e credo che la sintassi di prima fosse scorretta
-
stavolta funziona
grazie mille!
-
prego...
alla fine ce l'abbiamo fatta!