循环遍历行,直到找到变量,然后计算行数

时间:2016-05-24 09:05:19

标签: php mysql

我正在建立一个等级系统,我有很多马匹,在马匹配置文件中,我希望根据胜利的数量来回应马的等级。第1,第2,第3等。

这是我的MySQL表包含马,在PHP中如何计算行以获得马的等级?

这是我的表格,例如,如果我在“Pauls”个人资料中,我怎么会回应他在全球排名中排名第四?

enter image description here

6 个答案:

答案 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 = ?)