Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获得排名后如何打破关系_Php_Mysql - Fatal编程技术网

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试图在哪些用户身上得分——他们第一次选择的用户比最后一次选择的用户早。