获得排名后如何打破关系

时间:2014-01-13 14:47:17

标签: 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 BY TotalPoints DESC) r
WHERE
    user_id = 22234

领带存在问题。我有一个表字段“pick_date”,我想用它来打破关系。首先打出他的选秀权的用户击败领带。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

除了总积分之外,你需要order选择日期。但是,您所说的是每个用户多行。那么,我们来看看最后选择日期:

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;

答案 1 :(得分:0)

如果sx14sp_mem_picks.pickdate是断开关系的字段,则按sx14sp_mem_picks子查询的顺序添加,添加 min(pickdate)asc

这将把最早的选区放在第一位 - 你必须使用MIN()bc,你需要使用聚合函数,因为使用了“group by”。