mysql是没有 Oracle 的 ROWNUM,虽然我没有用过Oracle,汗!
我们来看看问题需求“mysql 排序后获取某一行的位置”的出现
问题
- 在游戏记录中获取当前用户的排名位置,实现类似:击败了xx%用户!
- 当记录中分数相同时,按时间先后排序(按插入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]