1

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

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

这是我现在使用的代码。它不起作用,因为查询似乎总是返回 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");
4

1 回答 1

2

当您使用GROUP BYthenCOUNT返回每组的行数而不是结果集中所有行的单个计数。改为使用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)将使查询更有效率。索引中列的顺序也很重要。
于 2011-10-22T08:20:27.967 回答