Hea*_*rol 7 php mysql mysqli ranking
我搜索了论坛,找到解决问题的方法.我的问题是我无法找到如何保存每场锦标赛的排名位置.我创建了两个表和一个如下所示的查询:竞争对手(cid int auto_increment主键,名称varchar(25),lastname varchar(25)); comps(compid int auto_increment primary key,tournement int,cid int,points int);
select @rowno:= @rowno+1 as position, rank.*
from (
select name,lastname,SUM(points) as pts,group_concat(points) as round FROM
(select cid,tournament,points from comps
group by cid,tournament order by points)total
join competitors c on c.cid = total.cid
cross join (select @rowno := 0) r
group by total.cid
order by pts desc) rank
order by pts desc
Run Code Online (Sandbox Code Playgroud)
这是 SQLFiddle演示
我想要实现的是,当用户点击竞争对手的个人资料时,每个锦标赛的位置都会显示如下:
Name: Competitor One
Tournament 1: 1st 100 pts
Tournament 2: 2nd 80 pts
Tournament 3: 10th 30 pts
Run Code Online (Sandbox Code Playgroud)
我已经对点进行了分组,但我不知道如何使用位置来做到这一点.这可能来自此查询,还是我必须创建一个新的表,如position(pid int auto_increment primary key,tournament int,cid int,position int),其中我为每个竞争者插入每个位置.
希望有人理解我的问题,并可以给我一些提示或解决这个问题的方法
如果我的理解是正确的那么我希望这对你有用
select *,(SELECT COUNT(*)
FROM comps AS cmp2
WHERE cmp1.points < cmp2.points AND cmp1.tournament = cmp2.tournament) + 1 AS position
from competitors AS c1
inner join comps AS cmp1 on c1.cid = cmp1.cid
order by c1.name,c1.lastname,cmp1.compid, position ASC
Run Code Online (Sandbox Code Playgroud)
在这里工作 Sql Fiddle