我有一个 RuneScape 私人服务器,它将玩家分数存储在数据库中。高分加载玩家的分数并将它们放入表格中。
但现在出现了我无法解决的更难的部分:
我想显示玩家的排名。喜欢:'攻击等级:44,排名第 12'。所以它必须找到用户的排名。
我怎样才能让它工作?我现在用谷歌搜索了 2 天,我没有找到任何东西。
我不知道是否有办法使用相同的查询来实现这一点。
您可以进行另一个查询,例如:
位置 = select count(*) from players where attack > 44
+ 1
此查询将返回排名高于某人的玩家数量。“加一”部分是让排名从 1 开始(因为第一个不会有任何人排名高于他)。
例如,如果表是:
id attack
0 35
1 22
2 121
3 76
pos(3) = 1(只有玩家 2 排在上面)+ 1 = 2
您可以创建一个(可能)显示每个玩家得分的视图。沿着这些思路可能会奏效。
create view player_scores as
select player_id, sum(score)
from scores
group by player_id
这将为每个玩家提供一排,以及他们的总分。有了这个观点,排名就简单了。
select count(*)
from player_scores
where sum > (select sum from player_scores where player_id = 1)
该查询将返回得分高于 player_id = 1 的玩家数量。
当然,如果您在运行查询之前知道玩家的分数,则可以将该分数作为参数传递。只要列被索引,这将运行得更快。