[英]Loop through rows until you find a variable and then count the number of rows
1。
select h.*, @rownum := @rownum + 1 AS rank
from horses h, (SELECT @rownum := 0) r
order by h.first DESC, h.second DESC, h.third DESC
2。
SELECT * FROM
(
select h.*, @rownum := @rownum + 1 AS rank
from horses h, (SELECT @rownum := 0) r
order by h.first DESC, h.second DESC, h.third DESC
) t
WHERE id = 428
根据优先级在多个列上使用“订购依据”。
$sql = "SELECT
@rownum := @rownum + 1 as row_number
FROM horses
CROSS JOIN (SELECT @rownum := 0) r
WHERE name = "Paul"
ORDER BY
first ASC,
second ASC,
third ASC";
现在您可以从查询中获取任何用户的排名值。
两个查询以获取您的搜索记录的位置
set @name='Paul',@nr = 0, @namenr = 0;
select @namenr as nr from
(SELECT @nr:=@nr+1,if(name=@name, @namenr := @nr,@namenr=@namenr),name FROM SOME_TABLE order by first DESC ) subsel where subsel.name = @name;
第二个查询将返回您要查找的带有nr
列的一条记录。
根据您的计分系统,这可能是适合您的解决方案:
说您的“第一”代表3分,“第二”代表2分,“第三”代表1分。
这样,您可以根据总数计算出最高得分的赛马。
例:
保罗有2个“第一”,0个“第二”和1个“第三”,得到7分。 弗莱彻有2个“第一”,没有“第二”和“第三”,他得到6分。
计算所有点的总和,然后按该字段DESC排序。
SELECT (`first`*3)+(`second`*2)+(`third`*1) AS `total_score` FROM `horses` ORDER BY `total_score` DESC
SET @rank=0;
SELECT @rank:=@rank+1 AS `rank`, (`first`*3)+(`second`*2)+(`third`*1) AS `total_score` FROM `horses` ORDER BY `total_score` DESC
使用以下查询,您可以拥有自己的表格,以及旁边的每匹马的排名:
SELECT *,
@curRank := @curRank + 1 AS rank
FROM (SELECT @curRank := 0) r, horses
order by first desc, second desc, third desc
我正在使用(SELECT @curRank := 0)
来初始化查询中的curRank
要获得特定马匹的排名,您只需要计算排名在其上方的记录数即可; 按行构造函数排序是完成此操作的一种非常简洁的方法:
SELECT COUNT(*) + 1
FROM horses
WHERE (first, second, third)
> (SELECT first, second, third FROM horses WHERE id = ?)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.