ユーザーのテーブルと「ポイント」列があります。「ポイント」順に並べられたすべてのユーザーの行の数/場所を特定したいと思います。
すべてのユーザーデータの結果を取得してwhileループを実行し、idが必要なユーザーと等しくなると停止することができます。しかし、私のテーブルには最大100 000行が含まれるため、これを行うにはもっと効率的な方法があると思います。
これを試して:
SET @rownum = 0;
Select sub.*, sub.rank as Rank
FROM
(
Select *, (@rownum:=@rownum+1) as rank
FROM users
ORDER BY points
) sub
WHERE rank = 15
レコードの行番号が必要です
これがMySQLでそれを行う良い方法です
こんな感じ
SELECT rank_user.*
FROM
(
SELECT @rownum:=@rownum+1 ‘rank’, p.*
FROM user u, (SELECT @rownum:=0) r
ORDER BY points DESC
) rank_user
WHERE rank BETWEEN 2 AND 4;