ビデオゲームのハイスコアボードを作成しようとしています。
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
この結果を返します (サンプル):
ご覧のとおり、ユーザーFUNTIMES
の のスコアは、表によると に帰する必要が210
あるときに に帰されています (のスコアは 11)。eagles
vikings
scores
FUNTIMES
user_id
これを修正するにはどうすればよいですか?このようなものは美しく機能します:
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
is INを選択することはできませんscore
。私は完全に迷っています。
助けてくれてありがとう。
編集: 申し訳ありませんが、言及するのを忘れていました: 各ユーザーは、ハイスコア テーブルに一度しか表示できません。user_id
(これが、クエリにGROUP BY 規定がある理由です。)