php - 需要通过唯一用户标识、最大轮次从 mysql 中提取数据,然后按另一个值排序

标签 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

最佳答案

如果我没有理解错的话,您首先要按用户 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/

相关文章:

mysql 查询无法正确搜索关键字

MYSQL选择另一个表中的FOREACH元素的元素数量

php - 如何更快地从大数据库中选择记录?

MySQL JOIN 滥用?它能变得多糟糕?

PHP MySQL echo 计数

php - 从点击的按钮获取 URL

php - 三个表之间的内部连接以获取信息

javascript - 使用 ajax、php 和 javascript 验证通过后插入到数据库

mysql - SQL比较行

php - PHP 中的 !== 和 != 有什么区别?