按升序检索 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中文网其他相关文章!