Php 获得排名后如何打破关系
我有一个查询,可以在分数表中获得用户排名Php 获得排名后如何打破关系,php,mysql,Php,Mysql,我有一个查询,可以在分数表中获得用户排名 SELECT * FROM (SELECT *, @rank:=@rank + 1 rank FROM (SELECT user_id, SUM(round_total) TotalPoints FROM sx14sp_mem_picks GROUP BY user_id) s, (SELECT @rank:=0) init ORDER
SELECT
*
FROM
(SELECT
*, @rank:=@rank + 1 rank
FROM
(SELECT
user_id, SUM(round_total) TotalPoints
FROM
sx14sp_mem_picks
GROUP BY user_id) s, (SELECT @rank:=0) init
ORDER BY TotalPoints DESC) r
WHERE
user_id = 22234
领带有问题。我有一个表字段“pick_date”,我想用它来打破关系。首先做出选择的用户打成平局
有什么想法吗?除了总积分外,您还需要在提货日期前订购。但是,您所说的是每个用户有多行。那么,让我们看一下最后一个挑选日期:
SELECT *
FROM (SELECT *, (@rank:=@rank + 1) as rank
FROM (SELECT user_id, SUM(round_total) as TotalPoints, max(pick_date) as max_pick_date
FROM sx14sp_mem_picks
GROUP BY user_id
) s CROSS JOIN
(SELECT @rank := 0) init
ORDER BY TotalPoints DESC, max_pick_date asc
) r
WHERE user_id = 22234;
如果sx14sp_mem_picks.pickdate是要断开连接的字段,则按照sx14sp_mem_picks子查询的顺序,添加 最小(选取日期)asc
这将把最早的pickdate放在第一位-您必须使用MIN()bc您需要使用聚合函数,因为使用了“group by”。如果将对“pickdate”的引用放在需要的子查询之外,这将不起作用-它也将没有上下文,MIN()需要使用bc,他希望将较低的整数秩赋予最早使用bc的用户pickdate@spioter . . . 修复了pic日期的问题。我认为OP希望在最后一次挑选日期前排名较低。根据这个问题,每个用户有多行,因此有多个选择日期。OP说:“首先做出选择的用户胜出。”在我的书中,“first”=min()还根据@rank对用户进行排名,最高分数为0,较低分数的每个用户增加1,所以我相信“胜出”意味着更高的分数和更低的
code
@rank您的调整是一种改进,但用户仍将拥有并列的@rank-如果OP希望并列code
@rank,则必须决定使用您的方法;如果他希望每个用户获得不同的分数(假设TotalPoints和pickdate都没有并列关系)@spioter。你不明白。排序依据是按升序排序的。这就是“第一”的意义所在。问题在于每次挑选都有不同的日期(正如OP描述的数据)。您为用户指定了许多可能的日期中的哪一个?我选择的是最后一个,即当“选择”完成时,基于短语“首先做出选择的用户击败了对手”。注意“选择”的复数形式。这一点很好——这完全取决于OP试图在哪些用户身上得分——他们第一次选择的用户比最后一次选择的用户早。