Php 从mysql存储排名位置

Php 从mysql存储排名位置,php,mysql,mysqli,ranking,Php,Mysql,Mysqli,Ranking,我在论坛上搜索,寻找解决我问题的方法。我的问题 就是我不知道如何保存每场比赛的排名 这是举行。我创建了两个表和一个查询,如下所示: 竞争对手cid int自动递增主键,名称varchar25,姓氏varchar25; comps compid int自动递增主键、tournement int、cid int、points int select @rowno:= @rowno+1 as position, rank.* from ( select name,lastname,S

我在论坛上搜索,寻找解决我问题的方法。我的问题 就是我不知道如何保存每场比赛的排名 这是举行。我创建了两个表和一个查询,如下所示: 竞争对手cid int自动递增主键,名称varchar25,姓氏varchar25; 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
这是

我想实现的是,当用户单击竞争对手配置文件时,每个锦标赛的位置如下所示:

Name: Competitor One
Tournament 1: 1st 100  pts
Tournament 2: 2nd  80  pts
Tournament 3: 10th 30  pts
select * from competitors
inner join comps on competitors.cid = comps.cid
order by tournament, points desc
我已经对这些点进行了分组,但我不知道如何对位置进行分组。从这个查询中可以这样做吗?或者我必须创建一个新的表,比如positions pid int auto_increment主键、锦标赛int、cid int、position int,其中我插入每个竞争对手的每个位置


希望有人能理解我的问题,并能给我一些提示或解决方案

如果你想要每场比赛的结果,你可以这样做:

Name: Competitor One
Tournament 1: 1st 100  pts
Tournament 2: 2nd  80  pts
Tournament 3: 10th 30  pts
select * from competitors
inner join comps on competitors.cid = comps.cid
order by tournament, points desc
如果要将其分组,最简单的方法是使用子查询汇总每个竞争对手的分数:

select *,(select sum(points) from comps where competitors.cid=comps.cid) as points
from competitors
order by points desc

不,你不想要一个有位置的表格,因为那是计算出来的数据。您希望这样做的唯一原因是出于性能原因,并且每x时间自动更新一次。

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

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

正在工作的Sql FIDLE

这些不是已订购的吗?位置是点的数量否?点的顺序是正确的,但我想用@rowno变量中相同的方式存储位置。我希望这是有意义的,所以位置和点是在一起的。好吧,对不起,但如果位置是由点给出的,我不认为为位置添加另一个字段有用。但是,你可以添加一个名为position的字段,然后做你想做的事情。这就是我想做的。非常感谢。我正试图在排行榜上实现同样的东西,但我想不出来。我的排名表是这样设置的,我想在每一场比赛后得到同样的位置。