首页 >数据库 >mysql教程 >如何从 MySQL 表中可靠地按升序选择最后 N 行?

如何从 MySQL 表中可靠地按升序选择最后 N 行?

Barbara Streisand
Barbara Streisand原创
2024-12-04 02:29:12541浏览

How to Reliably Select the Last N Rows in Ascending Order from a MySQL Table?

从 MySQL 中选择最后 N 行

使用各种方法从 MySQL 数据库中选择最后 N 行可以是一项简单的任务。然而,当处理按升序排序的主键列时,传统方法可能会遇到限制。本文旨在为这个问题提供一个可靠的解决方案,允许操作和消除表中的记录。

问题:

最初的目标是检索表中的最后 50 行根据主键列 ID 按升序排序。然而,最初的尝试突出了两个弱点:

  1. 使用 ORDER BY id DESC 对行进行降序排序在使用 LIMIT 50 时无法保留所需的 ASC 顺序。
  2. 依赖于的查询从最大 ID 中减去固定值(例如 id > (SELECT MAX(id) FROM chat) - 50)变为操作行时不可靠。

解决方案:

为了克服这些挑战,更强大的方法采用了子查询:

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

说明:

  • 子查询 ((SELECT * FROM table ORDER BY id DESC LIMIT 50)) 检索表中的最后 50 行,同时保留降序。
  • 外部查询 (SELECT * FROM ...) 包装了子查询并引入了新的 ORDER BY 子句,该子句会覆盖之前的排序并根据 id 按升序对行重新排序。

这种方法有效解决了限制用传统方法遇到的。它允许:

  • 按 ASC 顺序检索最后 N 行,无论是否进行操作或删除。
  • 处理对表的更改,例如添加或删除行,不影响查询的准确性。

以上是如何从 MySQL 表中可靠地按升序选择最后 N 行?的详细内容。更多信息请关注PHP中文网其他相关文章!

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