2010-12-06 96 views
3

我正在創建一個高分服務器,其中一個所需的功能是能夠檢索用戶當前得分周圍的高分。目前,我有以下幾點:mysql中的負限制偏移

SELECT * FROM highscores 
WHERE score >= (SELECT score FROM highscores WHERE userID = someID) 
ORDER BY score, updated ASC 
LIMIT -9, 19 

這裏唯一的問題是,LIMIT的偏移參數不能爲負數,否則,我相信這會工作的花花公子。所以總而言之,是否有任何技巧/方法可以爲LIMIT偏移量提供負偏移量,或者是否有更好的方法來完成這一點?

+0

不確定爲什麼您需要使用負偏移量,您是否可以將從ASC到DESC的順序翻轉? – ajreal 2010-12-06 16:07:53

+0

然後我得到同樣的問題,但在另一端。假設玩家在排行榜上排名第345,排名從ORDER BY得分中隱含,更新(優先排列較早的得分)。然後,我們需要檢索345-9 - 345 + 9的行,我似乎無法找到通過LIMIT子句實現這一點的方法,因爲現在我如何排序,似乎需要負偏移量。 – Ylisar 2010-12-06 16:26:36

回答

7

您可以做的對接單選擇查詢一個真正的痛苦,或者只是這樣做:

(SELECT * FROM highscores 
WHERE score <= (SELECT score FROM highscores WHERE userID = someID) 
ORDER BY score, updated ASC 
LIMIT 9) 
UNION 
(SELECT * FROM highscores 
WHERE score = (SELECT score FROM highscores WHERE userID = someID)) 
UNION 
(SELECT * FROM highscores 
WHERE score >= (SELECT score FROM highscores WHERE userID = someID) 
ORDER BY score, updated ASC 
LIMIT 9) 

我在一塊扔搶指定用戶的分數所以它在列表的中間。可選,如果你需要它。另外,不要使用SELECT *,使用特定的字段。清晰度總是更可取,而性能明智,*糟透了。