PHP Utiliser la clause ORDER BY de MySQL


Sélectionner et trier des données d'une base de données MySQL

La clause ORDER BY est utilisée pour trier le jeu de résultats par ordre croissant ou décroissant.

Par défaut, la clause ORDER BY trie les enregistrements par ordre croissant. Pour trier les enregistrements par ordre décroissant, utilisez le mot-clé DESC.

SELECT column_name(s) FROM table_name ORDER BY column_name(s) ASC|DESC

Pour en savoir plus sur SQL, veuillez visiter notre tutoriel SQL .


Sélectionner et trier des données avec MySQLi

L'exemple suivant sélectionne les colonnes id, firstname et lastname de la table MyGuests. Les enregistrements seront triés par la colonne lastname :

Exemple (MySQLi orienté objet)

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Créer une connexion
$conn = new mysqli($servername, $username, $password, $dbname);
// Vérifier la connexion
if ($conn->connect_error) {
die("Échec de la connexion : " . $conn->connect_error);
}

$sql = "SELECT id, firstname, lastname FROM MyGuests ORDER BY lastname";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
// afficher les données de chaque ligne
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Nom: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 résultats";
}
$conn->close();
?>
Exécuter l'exemple »

Lignes de code à expliquer à partir de l'exemple ci-dessus :

Tout d'abord, nous configurons la requête SQL qui sélectionne les colonnes id, firstname et lastname de la table MyGuests. Les enregistrements seront triés par la colonne lastname. La ligne suivante exécute la requête et met les données résultantes dans une variable appelée $result.

Ensuite, la fonction num_rows() vérifie s'il y a plus de zéro lignes retournées.

S'il y a plus de zéro lignes retournées, la fonction fetch_assoc() met tous les résultats dans un tableau associatif que nous pouvons parcourir. La boucle while() parcourt le jeu de résultats et affiche les données des colonnes id, firstname et lastname.

L'exemple suivant montre la même chose que l'exemple ci-dessus, de manière procédurale avec MySQLi :

Exemple (MySQLi procédural)

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Créer une connexion
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Vérifier la connexion
if (!$conn) {
die("Échec de la connexion : " . mysqli_connect_error());
}

$sql = "SELECT id, firstname, lastname FROM MyGuests ORDER BY lastname";
$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) {
// afficher les données de chaque ligne
while($row = mysqli_fetch_assoc($result)) {
echo "id: " . $row["id"]. " - Nom: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 résultats";
}

mysqli_close($conn);
?>
Exécuter l'exemple »


Vous pouvez également afficher le résultat dans un tableau HTML :

Exemple (MySQLi orienté objet)

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Créer une connexion
$conn = new mysqli($servername, $username, $password, $dbname);
// Vérifier la connexion
if ($conn->connect_error) {
die("Échec de la connexion : " . $conn->connect_error);
}

$sql = "SELECT id, firstname, lastname FROM MyGuests ORDER BY lastname";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
echo "<table><tr><th>ID</th><th>Nom</th></tr>";
// afficher les données de chaque ligne
while($row = $result->fetch_assoc()) {
echo "<tr><td>".$row["id"]."</td><td>".$row["firstname"]." ".$row["lastname"]."</td></tr>";
}
echo "</table>";
} else {
echo "0 résultats";
}
$conn->close();
?>
Exécuter l'exemple »

Sélectionner des données avec PDO (+ instructions préparées)

L'exemple suivant utilise des instructions préparées.

Ici, nous sélectionnons les colonnes id, firstname et lastname de la table MyGuests. Les enregistrements seront triés par la colonne lastname et affichés dans un tableau HTML :

Exemple (PDO)

<?php
echo "<table style='border: solid 1px black;'>";
echo "<tr><th>Id</th><th>Prénom</th><th>Nom de famille</th></tr>";

class TableRows extends RecursiveIteratorIterator {
function __construct($it) {
parent::__construct($it, self::LEAVES_ONLY);
}

function current() {
return "<td style='width:150px;border:1px solid black;'>" . parent::current(). "</td>";
}

function beginChildren() {
echo "<tr>";
}

function endChildren() {
echo "</tr>" . "\n";
}
}

$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";

try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT id, firstname, lastname FROM MyGuests ORDER BY lastname");
$stmt->execute();

// définir le tableau résultant comme associatif
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
echo $v;
}
} catch(PDOException $e) {
echo "Erreur : " . $e->getMessage();
}
$conn = null;
echo "</table>";
?>
Exécuter l'exemple »