我正在建立一个等级系统,我有很多马匹,在马匹配置文件中,我希望根据胜利的数量来回应马的等级。第1,第2,第3等。
这是我的MySQL表包含马,在PHP中如何计算行以获得马的等级?
这是我的表格,例如,如果我在“Pauls”个人资料中,我怎么会回应他在全球排名中排名第四?
答案 0 :(得分:1)
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
答案 1 :(得分:0)
根据优先级对多个列使用Order By。
$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";
现在您可以从任何用户的查询中获取位置值。
答案 2 :(得分:0)
获取搜索记录位置的两个查询
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 :(得分:0)
根据您的评分系统,这可能是适合您的解决方案:
说你的'第一'意味着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
答案 4 :(得分:0)
通过以下查询,您可以获得您的表格,并在其旁边显示每匹马的排名:
SELECT *,
@curRank := @curRank + 1 AS rank
FROM (SELECT @curRank := 0) r, horses
order by first desc, second desc, third desc
我正在使用(SELECT @curRank := 0)
初始化查询中的curRank
答案 5 :(得分:0)
要获得特定马的等级,您只需计算排在其上的记录数;按行构造器排序是实现此目的的一种非常简洁的方法:
SELECT COUNT(*) + 1
FROM horses
WHERE (first, second, third)
> (SELECT first, second, third FROM horses WHERE id = ?)