我不确定这个问题是否已经被问过,但我不知道如何更好地表达它:)
我有一张游戏结果表。我需要返回前 10 名结果(对于排行榜),但我的结果必须返回每个玩家的最高游戏而不是复制玩家(所以我正在寻找每个玩家的最高分并基于前 10 名玩家,而不是说如果我在分数上排名第一和第三,请向我展示两次)。
我现在使用的 SQL 是:
SELECT
`games`.`score`,
CONCAT(`users`.`full_name`) AS `name`,
`users`.`facebook_id`
FROM
`games`,
`users`
WHERE
`games`.`user_id`=`users`.`id`
AND `users`.`id` IN ('user ids goes here')
AND `games`.`status`=2
ORDER BY
`games`.`score` DESC
LIMIT 10";
这可以通过单个查询来完成,还是最好处理返回的数组并从那里创建我想要的结果?
更新:
为了更好地说明,假设我们有以下结果:
Jack - 300 points
Jill - 280 points
Gareth - 250 points
Jack - 240 points (this is the same jack)
Peter - 230 points
....
我想根据他们的最高分从所有游戏中返回前 10 名玩家,所以不一定是 10 个结果,但我正在寻找一个结果,然后返回以下内容:
Jack - 300 points
Jill - 280 points
Gareth - 250 points
Peter - 230 points
所以第二个杰克被删除了,因为他已经在名单上,只是分数更高。
我希望这有帮助 :)