MySQL实现排名并查询指定信息排名功能,并列排名功能

180it 2020-02-16 AM 1956℃ 0条

思路:可以先排序,再对结果进行编号;也可以先查询结果,再排序编号。

说明:

@rownum := @rownum + 1 中 := 是赋值的作用,这句话的意思是先执行@rownum + 1,然后把值赋给@rownum;

(SELECT @rownum := 0) r 这句话的意思是设置rownum字段的初始值为0,即编号从1开始。

实现排名:

方法一:

PHP
SELECT t., @rownum := @rownum + 1 AS rownum FROM (SELECT @rownum := 0) r, (SELECT FROM testsort ORDER BY score DESC) AS t;
方法二:

PHP
SELECT t.*, @rownum := @rownum + 1 AS rownum FROM (SELECT @rownum := 0) r, testsort AS t ORDER BY t.score DESC;
查看指定用户排名:

方法一:

PHP
SELECT b. FROM ( SELECT t., @rownum := @rownum + 1 AS rownum FROM (SELECT @rownum := 0) r, (SELECT * FROM testsort ORDER BY score DESC) AS t ) AS b WHERE b.uid = 222;
方法二:

PHP
SELECT b. from ( SELECT t., @rownum := @rownum + 1 AS rownum FROM (SELECT @rownum := 0) r, testsort AS t ORDER BY t.score DESC ) as b where b.uid = 222;

////////////////////////////////////////实例/////////////////////////////////

PHP
<?php $csql=$empire->fetch1("SELECT b. FROM( SELECT t., @rownum := @rownum + 1 AS rownum FROM (SELECT @rownum := 0) r, (SELECT * FROM ecms_games where leixing = 2 ORDER BY onclick DESC) AS t ) AS b WHERE b.id = 11;"); if($csql) echo $csql[rownum]; ?>

实现并列排名(相同分数排名相同):

SELECT

obj.uid,

obj.score,

CASE

WHEN @rowtotal = obj.score THEN

@rownum

WHEN @rowtotal := obj.score THEN

@rownum :=@rownum + 1

WHEN @rowtotal = 0 THEN

@rownum :=@rownum + 1

END AS rownum

FROM

(

SELECT

uid,

score

FROM

testsort

ORDER BY

score DESC

) AS obj,

(SELECT @rownum := 0 ,@rowtotal := NULL) r

查询指定用户并列排名:

SELECT total.* FROM

(SELECT

obj.uid,

obj.score,

CASE

WHEN @rowtotal = obj.score THEN

@rownum

WHEN @rowtotal := obj.score THEN

@rownum :=@rownum + 1

WHEN @rowtotal = 0 THEN

@rownum :=@rownum + 1

END AS rownum

FROM

(

SELECT

uid,

score

FROM

testsort

ORDER BY

score DESC

) AS obj,

(SELECT @rownum := 0 ,@rowtotal := NULL) r) AS total WHERE total.uid = 222;

支付宝打赏支付宝打赏 微信打赏微信打赏

如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!

标签: none

MySQL实现排名并查询指定信息排名功能,并列排名功能