我在论坛上搜索了解决我的问题的方法。我的问题是,我找不到如何保存每次举办的比赛的排名位置。我创建了两个表和一个查询,如下所示:
竞争者(cid int自动递增主键,名字varchar(25),姓氏varchar(25));
comps(compid int自动递增主键,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
以下是SQLFiddle演示
我想实现的目标是,当用户点击竞争对手的个人资料时,像这样显示每个比赛的排名:
Name: Competitor One
Tournament 1: 1st 100 pts
Tournament 2: 2nd 80 pts
Tournament 3: 10th 30 pts
我已经对点进行了分组,但是我不知道如何在位置方面做到这一点。从这个查询中是否可能实现,还是我必须创建一个新的表,例如“positions”(pid int auto_increment primary key,tournament int,cid int,position int),在其中为每个竞争者插入每个位置。
希望有人能理解我的问题,并能给我一些提示或解决方案。