Ordinare i record con la clausola ORDER BY

Gli argomenti di questa pagina

  • La clausola ORDER BY
  • Tipo di ordinamento
  • Ordinamento su una o più colonne
  • Codice per eseguire le Query
  • Alcuni esempi
  • Ordinamento casuale con ORDER BY RAND()

Quando una Query genera un resultset, normalmente i record non seguono alcun tipo di ordinamento ma generalmente i record vengono restituiti nell'ordine di inserimento. Se vogliamo che i record siano mostrati in un determinato modo occorre specificarlo usando la clausola ORDER BY.

La clausola ORDER BY

In una query MYSQL la clausola ORDER BY compare sempre come ultima istruzione, dopo qualsiasi altra istruzione MYSQL.
Ecco la sintassi:

SELECT elenco_campi
FROM tabella
WHERE condizioni
ORDER BY elenco_campi [ASC - DESC]

Tipo di ordinamento

Come premesso nel riquadro della sintassi l'ordinamento la clausola ORDER BY ha un parametro che indica il tipo di ordinamento da imporre al resultset: ascendente o discendente. Se il tipo di ordinamento non è espresso, viene usato quello predefinito che è ASC. Per questo motivo quando desideriamo un ordinamento ascendente posiamo anche evitare di indicarlo.

Ordinamento su una o più colonne

Come criterio di ordinamento è possibile indicare una o più colonne.
Se viene indicata una sola solonna, l'ordinamento viene effettuato su quella colonna col tipo di ordinamento scelto.
Se vengono indicate più colonne. In questo caso le righe vengono ordinate prima sulla prima colonna, poi sulla seconda e così via. Per questo motivo è bene porre attenzione alla sequenza con cui vengono indicate le varie colonne.
Per ogni colonna è anche possibile indicare il tipo di ordinamento richiesto: ASC o DESC.

Codice per eseguire le Query

Tutte le Query presentate come esempi sono eseguite da questo script.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
include ('res/db_login.php');
if (!
$link mysql_connect($Host$User$Password)) {
    echo 
mysql_error() . "<br />\n"
} else {
    if (!
mysql_select_db($DBName)) {
        echo 
mysql_error() . "<br />\n"
    } else {
        
mysql_set_charset("utf8");
        if (
$result mysql_query($Query)) {
            
$num_row mysql_num_rows($result);
            
$numfields mysql_num_fields($result);
            
$fields = array();
            for (
$i=0$i $numfields$i++) {
                
$fields[] = mysql_field_name($result$i);
            }
            if (
$num_row 0) {
                echo 
$num_row " record letti<br />\n";
                echo 
"<table class=\"tabella_it\">\n";        
                echo 
"<tr>\n";
                for (
$i=0$i $numfields$i++) {
                    echo 
"<th>" $fields[$i] . "</th>\n";
                }
                echo 
"</tr>\n";
                while (
$row mysql_fetch_array($result)) {
                    echo 
"<tr>\n";
                    for (
$i=0$i $numfields$i++) {
                        echo 
"<td>";
                        echo 
is_null($row[$fields[$i]]) ? 'NULL' $row[$fields[$i]];
                        echo 
"</td>\n";
                    }
                    echo 
"</tr>\n";
                }
                echo 
"</table>\n";
            } else {
                echo 
"Nessun record restituito<br />\n";
            }
        } else {
            echo 
mysql_error() . "<br />\n"
        }
    }
}
mysql_close ($link);

Alcuni esempi

Gli esempi di questa pagina vediamo come lavorare sulla tabella sql_citta.
In questo primo esempio ordiniamo i record sul campo 'citta'.
Il tipo di ordinamento (ASC o DESC) non è espresso, quindi viene preso il tipo predefinito che è ASC.

esempio 1
1
2
3
4
5
6
<?php
$Query 
"SELECT *
FROM sql_citta 
ORDER BY citta 
"
;
?>
trovati 38 record
15 record visualizzati
id cap citta prov
1 35031 AbanoTerme PD
2 23821 Abbadia Lariana LC
32 02011 Accumoli RI
24 80125 Agnano NA
23 56017 Agnano PI
3 56011 Agropoli GH
5 06031 Bevagna PG
36 95040 Borgo lupo CT
6 12011 Borgo S. Dalmazzo CN
34 98031 Capizzi ME
7 18037 Castel Vittorio IM
25 36078 Castelvecchio VI
27 67020 Castelvecchio calvisio AQ
8 43050 Cereseto PR
9 44030 Coccanile FE

Nell'esempio che segue ordiniamo i record sul campo 'citta' scegliendo il dipo di ordinamento DESC.

esempio 2
1
2
3
4
5
6
<?php
$Query 
"SELECT *
FROM sql_citta 
ORDER BY citta DESC
"
;
?>
trovati 38 record
15 record visualizzati
id cap citta prov
22 67010 Ville di Fano AQ
21 38030 Varena TN
20 39013 Moso in passiria BZ
31 80075 Monterone NA
37 89020 Melicucco RC
43 40059 Medicina BO
19 55060 Massarosa LU
18 58010 Marsiliana GR
42 30126 Malamocco VE
33 31037 Loria TV
41 33020 Ligosullo UD
40 12040 Isola di bene vagienna CN
162 29010 Godi PC
15 17010 Giusvalla SV
39 81010 Gallo matese CE

Seguono due esempi nessi affiancati per confrontare il diverso comportamento a seconda del tipo di ordinamento che si da alle colonne.
Nell'esempio 3 e 4 l'ordinamento viene effettuato sulle colonne citta e prov.
Nell'esempio 3 non viene espresso alcun tipo di ordinamento, quindi entrambe le colonne vengono ordinate in modo ASC.
Nell'esempio 4 viene per la colonna citta non viene espresso alcun tipo di ordinamento, quindi viene ordinata nel modo ASC, per la sola colonna prov viene espresso in modo esplicito il modo DESC .

esempio 3
1
2
3
4
5
6
<?php
$Query 
"SELECT *
FROM sql_citta 
ORDER BY citta, prov 
"
;
?>
trovati 38 record
15 record visualizzati
id cap citta prov
1 35031 AbanoTerme PD
2 23821 Abbadia Lariana LC
32 02011 Accumoli RI
24 80125 Agnano NA
23 56017 Agnano PI
3 56011 Agropoli GH
5 06031 Bevagna PG
36 95040 Borgo lupo CT
6 12011 Borgo S. Dalmazzo CN
34 98031 Capizzi ME
7 18037 Castel Vittorio IM
25 36078 Castelvecchio VI
27 67020 Castelvecchio calvisio AQ
8 43050 Cereseto PR
9 44030 Coccanile FE
esempio 4
1
2
3
4
5
6
<?php
$Query 
"SELECT *
FROM sql_citta 
ORDER BY citta, prov DESC
"
;
?>
trovati 38 record
15 record visualizzati
id cap citta prov
1 35031 AbanoTerme PD
2 23821 Abbadia Lariana LC
32 02011 Accumoli RI
23 56017 Agnano PI
24 80125 Agnano NA
3 56011 Agropoli GH
5 06031 Bevagna PG
36 95040 Borgo lupo CT
6 12011 Borgo S. Dalmazzo CN
34 98031 Capizzi ME
7 18037 Castel Vittorio IM
25 36078 Castelvecchio VI
27 67020 Castelvecchio calvisio AQ
8 43050 Cereseto PR
9 44030 Coccanile FE

Ordinamento casuale con ORDER BY RAND()

Oltre ai metodi visti qui sopre abbiamo anche un altro tipo di orinamento che è quello casuale. Questo serve per esporre un recordset con un ordine casuale.
Ad ogni refresh della pagina l'ordinamento viene cambiato casualmente.

esempio 2
1
2
3
4
5
6
<?php
$Query 
"SELECT *
FROM sql_citta 
ORDER BY RAND() 
"

?>
trovati 38 record
15 record visualizzati
id cap citta prov
40 12040 Isola di bene vagienna CN
32 02011 Accumoli RI
18 58010 Marsiliana GR
10 89030 Condofuri RC
19 55060 Massarosa LU
12 60013 Corinaldo AN
2 23821 Abbadia Lariana LC
28 21030 Cuvio VA
30 80070 Fusaro NA
5 06031 Bevagna PG
33 31037 Loria TV
23 56017 Agnano PI
25 36078 Castelvecchio VI
38 22010 Dosso del liro CO
7 18037 Castel Vittorio IM

 

 



settore tecnico il sito di lorettabweb il Forum di sostegno
il forum il forum il forum