- Home
- Categorie
- Coding e Sistemistica
- PHP
- Order by (SQL)
-
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!