Lors de la récupération des N dernières lignes d'une base de données MySQL potentiellement manipulable, en garantissant à la fois chronologique ( décroissant) et l’ordre croissant peuvent être difficiles. Cet article résout ce problème en proposant une solution à l'aide d'une sous-requête.
La requête suivante vise à sélectionner les 50 dernières lignes d'une table classées par identifiant de clé primaire par ordre décroissant :
SELECT * FROM `table` ORDER BY id DESC LIMIT 50;
Cependant, cette approche présente un défaut : si des lignes sont supprimées, les lignes suivantes ne seront pas récupérées avec précision dans l'ordre croissant. order.
De même, la requête ci-dessous ne parvient pas à résoudre le problème de manipulation :
SELECT * FROM `table` WHERE id > ((SELECT MAX(id) FROM chat) - 50) ORDER BY id ASC;
Solution utilisant une sous-requête :
Pour surmonter ces limitations , 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 les 50 dernières lignes de la table dans ordre décroissant à l'aide d'une sous-requête, puis les réordonne par ordre croissant avant de récupérer le résultat final.
Cette approche permet une récupération précise des N dernières lignes, quelles que soient les modifications ou suppressions apportées à la table, en veillant à ce que les données soient affichées dans l'ordre chronologique souhaité.
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!