2017-07-03 71 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行,他們會有所不同。