1

这基本上就是我想要做的。假设您正在建立一个网站,对在视频游戏中获得高分的人进行排名。您有一个用户,他在级别 1、2 和 3 上分别获得 100、150 和 200 分。然后,您有另一个用户获得了 200、100 和 100 的分数。如果您正在查看用户 1,您将获得如下表格:

         | 分数 | 排名 |
1级:| 100 | 2 |
2级:| 150 | 1 |
3级:| 200 | 1 |

我已经知道如何将分数存储在 MySQL 表中,然后对数据进行排名。这是它变得有点棘手的地方。假设您想平均用户的所有排名。对于用户 1,您将获得 1.333。对于用户 2,您将获得 1.666。所以如果你对这些数据进行排名,你会得到一个像这样的表格:

        | 平均排名 | 排名 |
用户 1:| 1.333 | 1 |
用户 2:| 1.666 | 2 |

基本上,最好的方法是什么?

4

3 回答 3

0

好吧,假设您的表类似于

LevelID (int)
UserID (int)
Score (int)

你可能会做类似的事情

SET @rank = 0;
SELECT *, AVG(Score) as AverageScore, @row_num := @row_num + 1 as Rank FROM scores
GROUP BY UserID
ORDER BY `AverageScore` DESC

我使用平均分数和排名而不是平均排名的原因是,谁使用平均排名?这很奇怪,也更难计算。如果你显示你的 SQL 来获取排名,那么它会更容易。如果您实际上将排名存储在表中(这不是好的做法),那么您可以按 UserID 和 AVG(Rank) 排序

于 2012-08-22T00:51:42.067 回答
0
 "SELECT level, AVG(Rank) FROM (YOUR TABLE NAME HERE) GROUP BY level"

将为您提供一张表的排名列的平均值。我假设每张桌子代表一个玩家。如果是这种情况,您必须在每个用户表上运行此查询。另请注意,我假设 1 级 - 3 级是您的唯一 ID。

于 2012-08-22T00:47:52.740 回答
0

最有效的方法可能是在提取数据时在 MySQL 查询中使用聚合函数。

http://www.mysqltutorial.org/mysql-aggregate-functions.aspx

于 2012-08-22T00:42:57.483 回答