MySQL返回一个具有相同日期和时间的按顺序跳过的行

6yoyoihd  于 2023-02-28  发布在  Mysql
关注(0)|答案(1)|浏览(103)

我有一个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的日期还是因为我的查询。

zfciruhq

zfciruhq1#

如果某些记录的排序表达式具有相同的值,则它们将以随机顺序返回。也就是说,在这样的组中排序是不确定的。
您的输出中的记录6-11(id 13,16,15,14,12,11)在用于排序的字段中具有相同的值。并且这些记录在这个组中的排序是随机的,它可能随时改变-甚至在下一次查询执行时。
当您使用LIMIT时,这6个记录中只有一个与指定的记录编号区域匹配。并且这一个记录是从所有6个可能的记录中随机选择的。今天选择id=12,明天可能是另一个-再次不确定。
如果你需要确定的排序顺序,记录必须是唯一的排序表达式。改变它,例如,ORDER BY createdAt DESC, id-你的问题就会消失。

相关问题