mysql获得条件排序后的所在位置、行号

mysql是没有 Oracle 的 ROWNUM,虽然我没有用过Oracle,汗!

我们来看看问题需求“mysql 排序后获取某一行的位置”的出现

问题

  1. 在游戏记录中获取当前用户的排名位置,实现类似:击败了xx%用户!
  2. 当记录中分数相同时,按时间先后排序(按插入id就好)

解决

使用变量和子查询实现(talk is cheap,show me the code)

这里设定id,user_id,score(分数),[current_user_score]是当前用户的分数

  • 子sql:
select id,user_id,score,(@rank:=@rank+1) as rank from (select (@rank:=0)) tmpA, test_table where score>=[current_user_score] order by score desc,id; 
  • 总体sql,[current_user_id]是当前用户id
select rank from (select id,user_id,score,(@rank:=@rank+1) as rank from (select (@rank:=0)) tmpA, test_table where score>=[current_user_score] order by score desc,id) tmpB where user_id=[current_user_id]

感谢

原文章思路来源:http://qd5.iteye.com/blog/1160370

Author: thinkwei

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注