首页 >数据库 >mysql教程 >尽管进行了数据操作,如何从 MySQL 中按升序检索最后 N 行?

尽管进行了数据操作,如何从 MySQL 中按升序检索最后 N 行?

Susan Sarandon
Susan Sarandon原创
2024-12-27 09:15:10560浏览

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

按升序检索 MySQL 中的最后 N 行并处理数据

从 MySQL 数据库中选择最后 N 行是一种常见操作。然而,在操作数据时,指定返回行的顺序可能会很棘手。

考虑以下场景:您想要从名为“table”的表中选择最后 50 行,基于“id”列,它是主键。按“id”升序对行进行排序是一项基本要求。

尝试失败

以下查询尝试按降序对结果进行排序,但失败返回最后 50 行:

SELECT 
    *
FROM
    `table`
ORDER BY id DESC
LIMIT 50;

或者,此查询尝试识别最后一个通过将“id”值与最大“id”值减 50 进行比较,可以得到 50 行,但如果已删除行,则不起作用:

SELECT 
    *
FROM
    `table`
WHERE
    id > ((SELECT 
            MAX(id)
        FROM
            chat) - 50)
ORDER BY id ASC;

解决方案

要解决这个问题,可以使用子查询来达到想要的结果:

SELECT * FROM
(
 SELECT * FROM table ORDER BY id DESC LIMIT 50
) AS sub
ORDER BY id ASC;

先这个查询执行子查询,该子查询从“table”中选择最后 50 行并按降序对它们进行排序。然后,生成的子查询别名为“sub”。

最后,外部查询从“sub”子查询中选择所有行,并按升序对它们进行排序。这有效地从表中检索最后 50 行,确保它们根据“id”列按升序排序,并处理行可能已被操纵的情况。

以上是尽管进行了数据操作,如何从 MySQL 中按升序检索最后 N 行?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn