这基本上是我想做的。假设你正在建立一个网站,对在电子游戏中获得高分的人进行排名。您有一个用户,他在级别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.33|1|用户2:|1.666|2|
基本上,最好的方法是什么?
最有效的方法可能是在提取数据时在MySQL查询中使用聚合函数。
http://www.mysqltutorial.org/mysql-aggregate-functions.aspx
"SELECT level, AVG(Rank) FROM (YOUR TABLE NAME HERE) GROUP BY level"
将为您的某个表提供排名列的平均值。我假设每张桌子代表一名球员。如果是这种情况,则必须对每个用户表运行此查询。另外请注意,我假设级别1-级别3是您唯一的ID。
假设您的表与相似
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(排名)