3

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

我有一个mysql表id, userid, rounds, reps, exerciseid

我需要针对我要进行的练习拉出用户最高的一轮。因此,如果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
4

2 回答 2

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 
于 2012-12-28T19:51:21.450 回答
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 
于 2012-12-28T20:02:57.183 回答