从mysql存储排名位置

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),其中我为每个竞争者插入每个位置.

希望有人理解我的问题,并可以给我一些提示或解决这个问题的方法

jam*_*rnj 1

如果我的理解是正确的那么我希望这对你有用

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