Press "Enter" to skip to content

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

打赏 赞(0)
微信
支付宝
微信二维码图片

微信扫描二维码打赏

支付宝二维码图片

支付宝扫描二维码打赏

Be First to Comment

发表评论

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

Captcha Code