Récupération des N dernières lignes dans MySQL par ordre croissant avec des données manipulées
La sélection des N dernières lignes d'une base de données MySQL est une opération courante. Cependant, spécifier l'ordre dans lequel les lignes doivent être renvoyées peut s'avérer délicat lorsque les données sont manipulées.
Considérez le scénario suivant : vous souhaitez sélectionner les 50 dernières lignes d'une table nommée "table" en fonction de la colonne "id", qui est la clé primaire. Le tri des lignes par ordre croissant par « id » est une exigence essentielle.
Tentatives infructueuses
La requête suivante tente de trier les résultats par ordre décroissant, mais elle échoue pour renvoyer les 50 dernières lignes :
SELECT * FROM `table` ORDER BY id DESC LIMIT 50;
Alternativement, cette requête tente d'identifier les 50 dernières lignes lignes en comparant les valeurs "id" à la valeur "id" maximale moins 50, mais cela ne fonctionne pas si les lignes ont été supprimées :
SELECT * FROM `table` WHERE id > ((SELECT MAX(id) FROM chat) - 50) ORDER BY id ASC;
La solution
Pour résoudre ce problème, vous pouvez utiliser une sous-requête pour obtenir le résultat souhaité :
SELECT * FROM ( SELECT * FROM table ORDER BY id DESC LIMIT 50 ) AS sub ORDER BY id ASC;
Cette requête exécute d'abord la sous-requête, qui sélectionne les 50 dernières lignes de « table » et les classe par ordre décroissant. La sous-requête résultante est ensuite alias "sub".
Enfin, la requête externe sélectionne toutes les lignes de la sous-requête "sub" et les classe par ordre croissant. Cela récupère efficacement les 50 dernières lignes de la table, garantit qu'elles sont triées par ordre croissant en fonction de la colonne "id" et gère le cas où les lignes peuvent avoir été manipulées.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!