我有一个MySQL查询,如下所示:
SELECT
*
FROM posts
ORDER BY createdAt DESC;
并返回以下内容:
结果在预料之中。
但是当我添加LIMIT and OFFSET
条件时,它会跳过行。
示例:
SELECT
*
FROM posts
ORDER BY createdAt DESC
LIMIT 5
OFFSET 2;
结果:
我的期望是它应该返回id 20, 19, 18, 17, 13
,而不是跳过一些行-为什么?我不确定是因为MySQL的日期还是因为我的查询。
1条答案
按热度按时间zfciruhq1#
如果某些记录的排序表达式具有相同的值,则它们将以随机顺序返回。也就是说,在这样的组中排序是不确定的。
您的输出中的记录6-11(id 13,16,15,14,12,11)在用于排序的字段中具有相同的值。并且这些记录在这个组中的排序是随机的,它可能随时改变-甚至在下一次查询执行时。
当您使用LIMIT时,这6个记录中只有一个与指定的记录编号区域匹配。并且这一个记录是从所有6个可能的记录中随机选择的。今天选择id=12,明天可能是另一个-再次不确定。
如果你需要确定的排序顺序,记录必须是唯一的排序表达式。改变它,例如,
ORDER BY createdAt DESC, id
-你的问题就会消失。