几个月前,我问了一个类似于此事的问题,得到了一些帮助,并认为我得到了答案。 3个月后,我发现这并没有100%的工作,所以我需要更多的帮助,但是现在我可以更好地提出这个问题。
我有一个带id, userid, rounds, reps, exerciseid
我需要拉出一个用户最高轮,专门针对我要拉的练习。因此,如果exerciseid
为8,那么我需要用户排在第exerciseid
位,但如果用户多次使用rounds
,这种情况会发生很多,那么我需要排序由reps
给我一个真正的最高表现。现在,在获得这些结果后,我需要按rounds
,reps
对此数据集进行排序,以便多个唯一身份用户具有相同的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
答案 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