<h1 >MysqL实现排名并查询指定用户排名功能,并列排名功能
表结构:CREATE table test.testsort (ID int(11) NOT NulL auto_INCREMENT,uID int(11) DEFAulT 0 COMMENT '用户ID',score decimal(10,2) DEFAulT 0.00 COMMENT '分数',PRIMARY KEY (ID))ENGINE = INNODBauto_INCREMENT = 1CHaraCTER SET utf8ColLATE utf8_general_ciCOMMENT = '测试排序'ROW_FORMAT = DYNAMIC;思路:可以先排序,再对结果进行编号;也可以先查询结果,再排序编号。说明:@rownum := @rownum + 1中 := 是赋值的作用,这句话的意思是先执行@rownum + 1,然后把值赋给@rownum;(SELECT @rownum := 0) r这句话的意思是设置rownum字段的初始值为0,即编号从1开始。实现排名:方法一:SELECT t.*,@rownum := @rownum + 1 AS rownumFROM (SELECT @rownum := 0) r,(SELECT * FROM testsort ORDER BY score DESC) AS t;方法二:SELECT t.*,testsort AS tORDER BY t.score DESC;结果:查看指定用户排名:方法一:SELECT b.* FROM(SELECT t.*,(SELECT * FROM testsort ORDER BY score DESC) AS t) AS b WHERE b.uID = 222;方法二:SELECT b.* from(SELECT t.*,testsort AS tORDER BY t.score DESC) as b where b.uID = 222;结果:
实现并列排名(相同分数排名相同):SELECTobj.uID,obj.score,CASEWHEN @rowtotal = obj.score THEN@rownumWHEN @rowtotal := obj.score THEN@rownum :=@rownum + 1WHEN @rowtotal = 0 THEN@rownum :=@rownum + 1END AS rownumFROM(SELECTuID,scoreFROMtestsortORDER BYscore DESC) AS obj,(SELECT @rownum := 0,@rowtotal := NulL) r
查询指定用户并列排名:SELECT total.* FROM(SELECTobj.uID,@rowtotal := NulL) r) AS total WHERE total.uID = 222;
总结
以上是内存溢出为你收集整理的MySQL实现排名并查询指定用户排名功能,并列排名功能全部内容,希望文章能够帮你解决MySQL实现排名并查询指定用户排名功能,并列排名功能所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)