gpt4 book ai didi

mysql - 条目排名和分组依据

转载 作者:行者123 更新时间:2023-11-29 07:05:01 24 4
gpt4 key购买 nike

我有一个网站,人们可以在该网站上保存游戏中的高分。我一直在尝试通过找到更高的其他高分的数量来为玩家的高分分配排名。因此,如果查询找到 5 个高分较高的人,则该玩家的高分排名将为 6。

问题在于,数据库中可以为每个用户记录多个分数(针对同一游戏)。这就是为什么当我只想显示玩家在游戏中的最佳得分(而不是他在该游戏中的所有得分)时使用 GROUP BY user 的原因。

这是我现在使用的代码。它不起作用,因为查询似乎总是返回 2(就像它总是返回只有一个分数比玩家的最高分高)。如果我删除 temp GROUP BY user,它会返回一个半正确的值,因为计算了给定游戏中每个玩家的所有分数(如果玩家在游戏中有多个分数)。

$count3 = mysql_result(mysql_query("SELECT COUNT(*) + 1 as Num FROM (SELECT * FROM ava_highscores WHERE game = $id AND leaderboard = $get_leaderboard[leaderboard_id] AND score > '$highscore2[score]') temp GROUP BY user");

最佳答案

当您使用 GROUP BY 时,COUNT 返回每组 的行数,而不是结果集中所有行的单一计数.请改用 COUNT(DISTINCT ...)。此外,您实际上并不需要内部选择。您可以将其全部编写为单个查询:

SELECT COUNT(DISTINCT `user`) + 1 AS Num
FROM ava_highscores
WHERE game = '3'
AND leaderboard = '5'
AND score > '1000'

注意事项

  • 确保您的 score 列是数字类型(而不是 varchar 类型),以便比较正常进行。
  • (game, leaderboard, score) 上添加索引将使查询更高效。索引中列的顺序也很重要。

关于mysql - 条目排名和分组依据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7858244/

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