Récupérer les N dernières lignes de MySQL par ordre croissant
Récupérer les N dernières lignes d'une base de données MySQL peut être une tâche courante, en particulier lorsque vous travaillez avec de grandes tables. Cependant, classer les résultats par ordre croissant tout en garantissant l'intégrité des données peut devenir un défi.
Considérez la requête suivante :
SELECT * FROM `table` ORDER BY id DESC LIMIT 50;
À première vue, cette requête semble sélectionner les 50 dernières lignes. Cependant, elle le fait par ordre décroissant (du plus grand au moins), ce qui viole l'exigence d'ordre croissant.
Une autre approche est :
SELECT * FROM `table` WHERE id > ((SELECT MAX(id) FROM chat) - 50) ORDER BY id ASC;
Cette requête vise à récupérer des lignes avec des identifiants. supérieur à l'ID maximum moins 50. Cependant, il échoue également car les données sont sujettes à des manipulations et des lignes pourraient être supprimées, ce qui pourrait affecter l'ID maximum. résultats.
Solution : approche par sous-requête
Pour relever 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 implique une sous-requête qui sélectionne les 50 dernières lignes par ordre décroissant. Les résultats de cette sous-requête sont ensuite stockés dans une table temporaire appelée « sub ». Enfin, la requête externe sélectionne toutes les lignes de "sub" et les classe par ordre croissant.
Cette approche garantit que les 50 dernières lignes sont sélectionnées, même si la table est manipulée, et que les résultats sont présentés par ordre croissant. commande.
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!