这基本上就是我想要做的。假设您正在建立一个网站,对在视频游戏中获得高分的人进行排名。你有一个用户,他分别在1级,2级和3级得分100,150和200。然后你有另一个得分为200,100和100的用户。如果你正在查看用户1,你会得到一个这样的表:
| Score | Rank | Level 1: | 100 | 2 | Level 2: | 150 | 1 | Level 3: | 200 | 1 |
我已经找到了如何将分数存储在MySQL表中然后对数据进行排名。这里有点棘手。假设您想要平均用户的所有排名。对于用户1,您将获得1.333。对于用户2,您将获得1.666。因此,如果您对该数据进行排名,您将获得如下表格:
| Average Rank | Rank | User 1: | 1.333 | 1 | User 2: | 1.666 | 2 |
基本上,最好的方法是什么?
答案 0 :(得分:0)
最有效的方法可能是在拉取数据时在MySQL查询中使用聚合函数。
答案 1 :(得分:0)
"SELECT level, AVG(Rank) FROM (YOUR TABLE NAME HERE) GROUP BY level"
将为您的某个表格提供平均排名列。我假设每张桌子代表一名球员。如果是这种情况,则必须在每个用户表上运行此查询。另请注意,我假设级别1 - 级别3是您的唯一ID。
答案 2 :(得分: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用于获取Rank,那么它会更容易。如果您实际上将排名存储在表格中(这不是一个好习惯),那么您只需按用户ID和AVG(排名)排序