2017-07-03 44 views
0
SELECT * 
FROM users 
ORDER BY highscore DESC 
LIMIT 5 OFFSET 5 

Mysql的LIMIT返回意外行

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

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

编辑:这里是表数据 -

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

+0

是否有任何限制,以防止用户具有相同的高分? –

+0

没有限制。我还应该提到,他们中的很多人都有相同的高分。 –

+2

向我们显示表格数据 –

回答

1

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

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

为了使排序稳定,包括独特的ID作为ORDER BY的最后一个键:

SELECT u.* 
FROM users u 
ORDER BY u.highscore DESC, u.userId 
LIMIT 5 OFFSET 5; 

然后,当您获取下一个5行,他们会有所不同。