Maison >base de données >tutoriel mysql >Comment récupérer les N dernières lignes par ordre croissant de MySQL malgré la manipulation des données ?

Comment récupérer les N dernières lignes par ordre croissant de MySQL malgré la manipulation des données ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-27 09:15:10547parcourir

How to Retrieve the Last N Rows in Ascending Order from MySQL Despite Data Manipulation?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn