需要通过唯一的userid,max rounds从mysql中提取数据,然后按另一个值排序

时间:2012-12-28 19:17:31

标签: php mysql select group-by

几个月前,我问了一个类似于此事的问题,得到了一些帮助,并认为我得到了答案。 3个月后,我发现这并没有100%的工作,所以我需要更多的帮助,但是现在我可以更好地提出这个问题。

我有一个带id, userid, rounds, reps, exerciseid

的mysql表

我需要拉出一个用户最高轮,专门针对我要拉的练习。因此,如果exerciseid为8,那么我需要用户排在第exerciseid位,但如果用户多次使用rounds,这种情况会发生很多,那么我需要排序由reps给我一个真正的最高表现。现在,在获得这些结果后,我需要按roundsreps对此数据集进行排序,以便多个唯一身份用户具有相同的rounds,然后按reps排序。

这可以用纯mysql完成,还是我最好用PHP来提取数据并对其进行排序?

SELECT
  max(l.rounds) as rounds,
  l.reps,l.userid
from leaderboard l
where l.exerciseid = 8 
group by l.userid 
order by 
  rounds desc,
  reps desc 

结构的例子 首先,这是一个集合

userid  exerciseid  rounds  reps
--     --     --
1    8  23  10
1    8  23  15
1    8  20  10
2    8  28  19
2    8  15  12
3    8  40  29


results I want

userid  exerciseid  rounds  reps
--     --     --
3    8  40  29
2    8  28  19
1    8  23  15

2 个答案:

答案 0 :(得分:0)

如果我理解正确,你想首先按用户ID和轮次进行分组以获得一轮的maxreps。然后你想从中选择最大轮数。

以下是在MySQL中表达这一点的一种方法:

select userid, rounds, maxreps
from (SELECT userid, l.rounds, MAX(l.reps) as maxreps
      from leaderboard l
      where l.exerciseid = 8 
      group by l.userid, l.rounds
     ) ur
where exists (select 1 from leaderboard lb where ur.userid = lb.userid and lb.exerciseid = 8 group by lb.userid having max(rounds) = ur.rounds))
order by rounds desc, maxreps desc 

答案 1 :(得分:0)

怎么样:

SELECT
  max(l.rounds) as rounds,
  max(l.reps) as reps,l.userid
from leaderboard l
where l.exerciseid = 8 
group by l.userid, l.exerciseid 
order by 
  rounds desc,
  reps desc 
相关问题