我有一个高得分(最高分)系统,它根据玩家的经验来计算位置。 但是现在我需要在网络的其他地方使用玩家的等级,也许在网络上的更多地方也像个人一样 高分,它将显示玩家在该技能中的等级。
因此只需循环播放&像Rank ++一样玩循环循环不会真正起作用,因为我需要保存该等级 其他地方。
我能做的是通过所有玩家循环,然后发送查询来更新该玩家的等级,但如果我有1000
玩家怎么办?或者更多?
这意味着每次加载1000
次查询。
我曾想过,如果有一个 SQL查询 ,我可以用一两个查询来执行相同的操作。
我该怎么做?我通过玩家的体验排序来 计算排名 ,因此我的表结构如下所示:
表:
球员
id(auto_increment)整数(255)
displayname varchar(255)unique
rank integer(255)default null
体验bigint(255)
答案 0 :(得分:2)
这应该为您提供id = 1的用户的排名。如果您想要每个玩家,只需删除WHERE子句:
SELECT a.id, a.displayname, a.rank, a.experience
FROM (
SELECT id, displayname, @r:=@r+1 AS rank, experience
FROM players, (SELECT @rank:=0) tmp
ORDER BY experience DESC) a
WHERE a.id = 1
我不会直接在玩家表中排名,因为这意味着每次用户改变经验时你都必须重新计算它。您可以在想要获得玩家或排行榜的排名的任何时候执行此查询。
如果您仍想更新它,可以使用此查询执行INNER JOIN,以使用此查询中的排名更新原始表。