PHP MySQL Utiliser la clause ORDER BY
Sélectionner et commander des données à partir d'une base de données MySQL
La clause ORDER BY est utilisée pour trier le jeu de résultats dans l'ordre croissant ou décroissant.
La clause ORDER BY trie les enregistrements par ordre croissant par défaut. 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 consulter notre didacticiel SQL .
Sélectionner et commander 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";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT id, firstname, lastname FROM MyGuests ORDER BY lastname";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 results";
}
$conn->close();
?>
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 du nom de famille. La ligne de code suivante exécute la requête et place les données résultantes dans une variable appelée $result.
Ensuite, le function num_rows()
vérifie s'il y a plus de zéro lignes renvoyées.
S'il y a plus de zéro ligne renvoyée, la fonction fetch_assoc()
place tous les résultats dans un tableau associatif que nous pouvons parcourir en boucle. La while()
boucle parcourt le jeu de résultats et génère les données des colonnes id, firstname et lastname.
L'exemple suivant montre la même chose que l'exemple ci-dessus, de la manière procédurale MySQLi :
Exemple (procédural MySQLi)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$sql = "SELECT id, firstname, lastname FROM MyGuests
ORDER BY lastname";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
// output data of each row
while($row = mysqli_fetch_assoc($result)) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 results";
}
mysqli_close($conn);
?>
Vous pouvez également mettre le résultat dans un tableau HTML :
Exemple (MySQLi orienté objet)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $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>Name</th></tr>";
// output data of each row
while($row = $result->fetch_assoc()) {
echo "<tr><td>".$row["id"]."</td><td>".$row["firstname"]." ".$row["lastname"]."</td></tr>";
}
echo "</table>";
} else {
echo "0 results";
}
$conn->close();
?>
Sélectionnez les données avec PDO (+ déclarations 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 du nom de famille et seront affichés dans un tableau HTML :
Exemple (AOP)
<?php
echo "<table style='border: solid 1px black;'>";
echo "<tr><th>Id</th><th>Firstname</th><th>Lastname</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();
// set the resulting array to associative
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
echo $v;
}
} catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
$conn = null;
echo "</table>";
?>