Lorsque vous essayez de récupérer les N dernières lignes d'une base de données MySQL, les classer par ordre croissant peut être délicat. L'ordre DESC standard échoue lorsque les lignes peuvent être manipulées. De même, l'utilisation d'une clause WHERE pour sélectionner des lignes avec des ID supérieurs à l'ID maximum moins N peut échouer si des lignes sont supprimées.
Pour surmonter ces défis, une sous-requête peut être utilisée :
SELECT * FROM ( SELECT * FROM table ORDER BY id DESC LIMIT 50 ) AS sub ORDER BY id ASC;
Cette requête sélectionne d'abord les 50 dernières lignes de la table 'table' par ordre décroissant, à l'aide de la clause LIMIT. Le résultat de cette sous-requête est stocké dans la table 'sub'. Enfin, la sous-requête elle-même est classée par ordre croissant par la colonne 'id'.
En utilisant une sous-requête, la sélection des N dernières lignes est isolée du processus de tri. Cela garantit que les N dernières lignes sont toujours sélectionnées, même si des lignes sont ajoutées ou supprimées de la table d'origine. La requête interne de la sous-requête classe les lignes par ordre décroissant, tandis que la requête externe classe le résultat de la sous-requête par ordre croissant.
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!