top10排名返回的问题,先记录一下目前想到的三种方式:

1:基础款

SELECT A.* , @rank:=@rank+1 AS pm FROM (SELECT * FROM userlist ORDER BY points DESC) A, (SELECT  @rank:=0) B;

查询结果为:

2:相同分数分配同样的排名,排名会根据前面的人数进行顺延

select t.*,(select count(s.points)+1 from userlist s where s.points>t.points) rank from userlist t order by t.points desc;

查询结果为:

3:相同分数分配同样的排名,排名不会根据前面的人数进行顺延

select t.*,(select count(s.points)+1 from (select s.points,count(s.points) from userlist s group by points order by points desc) s where s.points>t.points) rank from userlist t order by t.points desc;

查询结果为:

实际上,偶采用的不是以上三种,因为前端小丫头只要 10个,不需要这样麻烦的返回~

不过,做了学习和测试,还是要记录下的~~


Logo

更多推荐