Mysql LIMIT返回意外行

时间:2017-07-03 10:15:19

标签: mysql sql

SELECT *
FROM users
ORDER BY highscore DESC
LIMIT 5 OFFSET 5

SELECT *
FROM users
ORDER BY highscore DESC
LIMIT 5 OFFSET 10

返回相同的结果。当我省略LIMIT条款时,它们与记录不同!我搜索了社区。有类似的问题,但它们没有任何帮助。

编辑:这是表数据 -

Here is the table data ordered by <code>highscore</code>

1 个答案:

答案 0 :(得分:1)

据推测,问题在于你与highscore有联系。当你有联系时,MySQL会以任意和不确定的方式对具有相同值的行进行排序。即使是同一查询的两次运行也可能导致不同的排序。

为什么呢?原因很简单。对具有相同值的键进行排序没有“自然”顺序。 SQL表表示无序集。

要使排序稳定,请在ORDER BY

中添加唯一ID作为最后一个键
SELECT u.*
FROM users u
ORDER BY u.highscore DESC, u.userId
LIMIT 5 OFFSET 5;

然后,当您获取接下来的5行时,它们会有所不同。