English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Dans ce tutoriel, vous apprendrez à trier et afficher les données des tables MySQL en ordre croissant ou décroissant en utilisant PHP.
ORDER BYLa clause peut être combinée avecSELECTLes clauses peuvent être combinées pour afficher les données des tables triées par un champ spécifique. La clause ORDER BY permet de définir le nom du champ sur lequel le tri s'effectue ainsi que la direction d'ordre croissant ou décroissant.
La syntaxe de base de cette clause peut être donnée de la manière suivante :
SELECT column_name(s) FROM table_name ORDER BY column_name(s) ASC|DESC
Utilisons une requête SQL avec la clause ORDER BY pour effectuer une requête SQL, puis nous exécuterons la requête en la passant à la fonction PHP mysqli_query() pour obtenir des données ordonnées. Considérez la table persons de la base de données de démonstration suivante :
+----+------------+-----------+----------------------+ | id | first_name | last_name | email | +----+------------+-----------+----------------------+ | 1 | Peter | Parker | [email protected] | | 2 | John | Rambo | [email protected] | | 3 | Clark | Kent | [email protected] | | 4 | John | Carter | [email protected] | | 5 | Harry | Potter | [email protected] | +----+------------+-----------+----------------------+
Dans l'exemple suivant, le code PHP sélectionne toutes les lignes de la table personsfirst_nameLes colonnes sont triées par ordre alphabétique des résultats.
<?php /* tentative de connexion au serveur MySQL. Supposons que vous exécutez MySQL. Serveur avec configuration par défaut (utilisateur sans mot de passe "root") */ $link = mysqli_connect("localhost", "root", "", "demo"); //vérification de la connexion if($link === false){ die("erreur : impossible de se connecter. " . mysqli_connect_error()); } //tentative d'exécuter une requête SELECT avec une clause ORDER BY $sql = "SELECT * FROM persons ORDER BY first_name"; if($result = mysqli_query($link, $sql)){ if(mysqli_num_rows($result) > 0){ echo "<table>"; echo "<tr>"; echo "<th>id</th>"; echo "<th>first_name</th>"; echo "<th>last_name</th>"; echo "<th>email</th>"; echo "</tr>"; while($row = mysqli_fetch_array($result)){ echo "<tr>"; echo "<td>" . $row['id'] . "</td>"; echo "<td>" . $row['first_name'] . "</td>"; echo "<td>" . $row['last_name'] . "</td>"; echo "<td>" . $row['email'] . "</td>"; echo "</tr>"; } echo "</table>"; //fermer le jeu de résultats mysqli_free_result($result); } else{ echo "Aucun enregistrement correspondant à votre requête trouvé."; } } else{ echo "erreur : impossible d'exécuter $_sql. " . mysqli_error($link); } //Fermez la connexion mysqli_close($link); ?>
<?php /* tentative de connexion au serveur MySQL. Supposons que vous exécutez MySQL. Serveur avec configuration par défaut (utilisateur sans mot de passe "root") */ $mysqli = new mysqli("localhost", "root", "", "demo"); //vérification de la connexion if($mysqli === false){ die("erreur : impossible de se connecter. " . $mysqli->connect_error); } //tentative de sélection de l'exécution de la requête avec une clause ORDER BY $sql = "SELECT * FROM persons ORDER BY first_name"; if($result = $mysqli->query($sql)){ if($result->num_rows > 0){ echo "<table>"; echo "<tr>"; echo "<th>id</th>"; echo "<th>first_name</th>"; echo "<th>last_name</th>"; echo "<th>email</th>"; echo "</tr>"; while($row = $result->fetch_array()){ echo "<tr>"; echo "<td>" . $row['id'] . "</td>"; echo "<td>" . $row['first_name'] . "</td>"; echo "<td>" . $row['last_name'] . "</td>"; echo "<td>" . $row['email'] . "</td>"; echo "</tr>"; } echo "</table>"; // Libérez la collection de résultats $result->free(); } else{ echo "Aucun enregistrement correspondant à votre requête trouvé."; } } else{ echo "erreur : impossible d'exécuter $_sql. " . $mysqli->error; } //Fermez la connexion $mysqli->close(); ?>
<?php /* tentative de connexion au serveur MySQL. Supposons que vous exécutez MySQL. Serveur avec configuration par défaut (utilisateur sans mot de passe "root") */ try{ $pdo = new PDO("mysql:host=localhost;dbname=demo", "root", ""); //configurer le mode d'erreur PDO en exception $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e){ die("erreur : impossible de se connecter. " . $e->getMessage()); } //tentative de sélection de l'exécution de la requête try{ $sql = "SELECT * FROM persons ORDER BY first_name"; $result = $pdo->query($sql); if($result->rowCount() > 0){ echo "<table>"; echo "<tr>"; echo "<th>id</th>"; echo "<th>first_name</th>"; echo "<th>last_name</th>"; echo "<th>email</th>"; echo "</tr>"; while($row = $result->fetch()){ echo "<tr>"; echo "<td>" . $row['id'] . "</td>"; echo "<td>" . $row['first_name'] . "</td>"; echo "<td>" . $row['last_name'] . "</td>"; echo "<td>" . $row['email'] . "</td>"; echo "</tr>"; } echo "</table>"; //Libérez la collection de résultats unset($result); } else{ echo "Aucun enregistrement correspondant à votre requête trouvé."; } } catch(PDOException $e){ die("Erreur : Impossible d'exécuter $sql. \->getMessage()); } //Fermez la connexion unset($pdo); ?>
Après avoir trié les résultats, la collection de résultats sera comme suit :
+----+------------+-----------+----------------------+ | id | first_name | last_name | email | +----+------------+-----------+----------------------+ | 3 | Clark | Kent | [email protected] | | 5 | Harry | Potter | [email protected] | | 2 | John | Rambo | [email protected] | | 4 | John | Carter | [email protected] | | 1 | Peter | Parker | [email protected] | +----+------------+-----------+----------------------+
Avis :Par défaut, la clause ORDER BY trie les résultats par ordre croissant. Pour trier les enregistrements par ordre décroissant, vous pouvez utiliser la clé DESC.