从可能被操作的 MySQL 数据库中检索最后 N 行时,确保按时间顺序 (降序)和升序可能具有挑战性。本文解决了这个问题,提供了使用子查询的解决方案。
以下查询旨在从按主键 id 降序排列的表中选择最后 50 行:
SELECT * FROM `table` ORDER BY id DESC LIMIT 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;
此查询选择最后 50 行使用子查询从表中按降序排列,然后在检索最终结果之前按升序重新排序。
这种方法允许准确检索最后 N 行,无论进行任何更改或删除到表中,确保数据按所需的时间顺序显示。
以上是如何从 MySQL 表中可靠地按升序检索最后 N 行?的详细内容。更多信息请关注PHP中文网其他相关文章!