gpt4 book ai didi

mysql - PDO 返回最高整数值且无重复条目

转载 作者:行者123 更新时间:2023-11-30 23:13:45 25 4
gpt4 key购买 nike

我不确定是否有人问过这个问题,但我不知道如何更好地表达它:)

我有一张包含游戏结果的表格。我需要返回前 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

所以 The 2nd Jack 被移除了,因为他已经在列表中,只是得分更高。

希望对您有所帮助:)

最佳答案

好的,让我们一步一步来。

通过此查询,我们获得了游戏及其玩家的列表,并按游戏和分数排序。我们添加了一个行号,每局游戏重置为 1。

SELECT 
games.game_id,
`games`.`score`,
CONCAT(`users`.`full_name`) AS `name`,
`users`.`facebook_id`,
@row_num := if(@game != games.game_id, 1, @row_num + 1) AS rownumber,
@game := games.game_id
FROM
`games`
INNER JOIN users ON `games`.`user_id`=`users`.`id`
, (select @row_num := 1, @game := NULL) variables
WHERE
`users`.`id` IN ('user ids goes here')
AND `games`.`status`=2
ORDER BY
games.game_id, /*or something*/
`games`.`score` DESC

现在我们可以通过将上述查询放入其中来获得每场比赛的前 10 名球员

SELECT * FROM (
<above query here>
) subquery_alias
WHERE rownumber <= 10;

现在我们只需要添加一个 GROUP BY playername 并获得最好的结果。所以你的最终查询是这样的:

SELECT name, MAX(score) FROM (
SELECT
games.game_id,
`games`.`score`,
CONCAT(`users`.`full_name`) AS `name`,
`users`.`facebook_id`,
@row_num := if(@game != games.game_id, 1, @row_num + 1) AS rownumber,
@game := games.game_id
FROM
`games`
INNER JOIN users ON `games`.`user_id`=`users`.`id`
, (select @row_num := 1, @game := NULL) variables
WHERE
`users`.`id` IN ('user ids goes here')
AND `games`.`status`=2
ORDER BY
games.game_id, /*or something*/
`games`.`score` DESC
) subquery_alias
WHERE rownumber <= 10
GROUP BY `name`

关于mysql - PDO 返回最高整数值且无重复条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18789793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com