1

ユーザーのテーブルと「ポイント」列があります。「ポイント」順に並べられたすべてのユーザーの行の数/場所を特定したいと思います。

すべてのユーザーデータの結果を取得してwhileループを実行し、idが必要なユーザーと等しくなると停止することができます。しかし、私のテーブルには最大100 000行が含まれるため、これを行うにはもっと効率的な方法があると思います。

4

2 に答える 2

1

これを試して:

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
于 2012-11-06T15:27:44.283 に答える
0

レコードの行番号が必要です

これが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;
于 2012-11-06T15:27:53.510 に答える