2010-12-06 80 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 *,使用特定的字段。清晰度总是更可取,而性能明智,*糟透了。