我正在尝试为一个视频游戏创建高分榜。
有一个users
表:
还有一个scores
表:
我已经尝试使用以下查询:
SELECT MAX(`scores`.`score`) AS max_score,
`scores`.`team`,
`users`.`name`
FROM `scores`
LEFT JOIN `users`
ON `users`.`id` = `scores`.`user_id`
GROUP BY `scores`.`user_id`
ORDER BY max_score DESC
LIMIT 50
这将返回这个结果(示例):
![enter image description here](https://istack.dev59.com/6T512.webp)
如您所见,用户“FUNTIMES”的得分“210”被归属于“老鹰”,但根据“scores”表格,它应该被归属于“维京人”(“FUNTIMES”的“user_id”为11)。
我该如何解决这个问题?像这样的做法非常完美:
SELECT `scores`.`score`, `scores`.`team`, `users`.`name`
FROM `scores`
LEFT JOIN `users`
ON `users`.`id` = `scores`.`user_id`
WHERE `scores`.`id` IN (
SELECT MAX(`scores`.`score`)
FROM `scores`
GROUP BY `scores`.`user_id`
)
ORDER BY `scores`.`score` DESC
LIMIT 50
当然,我不能选择 WHERE id
是 IN score
。我完全迷失了。
提前感谢任何帮助。
编辑:抱歉,我忘记提到:每个用户在高分表中只能显示一次。(这就是为什么我在查询中使用 GROUP BY user_id
的原因。)