几个月前,我问了一个与此类似的问题,得到了一些帮助并认为我找到了答案。 3 个月后,我发现这并没有 100% 奏效,所以我需要更多帮助,但现在我了解得更多,可以更好地提出问题。
我有一个带有 id, userid, rounds, reps, exerciseid
的 mysql 表
我需要针对我要拉动的练习拉动用户最高回合。因此,如果 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
最佳答案
如果我没有理解错的话,您首先要按用户 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
关于php - 需要通过唯一用户标识、最大轮次从 mysql 中提取数据,然后按另一个值排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14074552/