Отрицательное смещение предела в MySQL - PullRequest
3 голосов
/ 06 декабря 2010

Я создаю сервер с высокими показателями, и одна из необходимых функций - возможность получать высокие оценки по текущему счету пользователей.В настоящее время у меня есть следующее:

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

Единственная проблема здесь в том, что параметр смещения LIMIT не может быть отрицательным, в противном случае я считаю, что это сработает.Итак, в заключение, есть ли какой-нибудь способ / способ предоставления отрицательного смещения для смещения LIMIT, или, возможно, есть лучший способ обойти это полностью?

1 Ответ

7 голосов
/ 07 мая 2011

Вы можете либо сделать настоящую боль в запросе одиночного выбора, либо просто сделать это:

(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 *, используйте определенные поля.Ясность всегда предпочтительнее, а производительность - * отстой.

...