bate's blog

調べたこと実装したことなどを取りとめもなく書きます。

ランキングのA位からB位の間のレコードをN件ランダムで取得するSQL

ランキングのA位からB位の間のレコードをN件ランダムに取得するSQL
ただし、自分の記録は除く

A

range = B - A
offset = A - 1
SELECT * FROM ranking, (SELECT id AS sid FROM ranking WHERE user_id != uid ORDER BY record ASC LIMIT range OFFSET offset) tmp WHERE ranking.id = tmp.sid ORDER BY RAND() LIMIT N;

user_id != uidを消すと自分の記録も含めることが可能。