我有一个用户表和一个“积分”列。我想确定按“点”排序的所有用户的行数/位置。
我可以获取所有用户数据的结果,然后执行 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;