高分(最高分)排名计算&更新查询?

时间:2013-12-09 15:28:25

标签: php mysql

我有一个高得分(最高分)系统,它根据玩家的经验来计算位置。 但是现在我需要在网络的其他地方使用玩家的等级,也许在网络上的更多地方也像个人一样 高分,它将显示玩家在该技能中的等级。

因此只需循环播放&像Rank ++一样玩循环循环不会真正起作用,因为我需要保存该等级 其他地方。

我能做的是通过所有玩家循环,然后发送查询来更新该玩家的等级,但如果我有1000玩家怎么办?或者更多? 这意味着每次加载1000次查询。

我曾想过,如果有一个 SQL查询 ,我可以用一两个查询来执行相同的操作。

我该怎么做?我通过玩家的体验排序来 计算排名 ,因此我的结构如下所示:

表:

  • 球员

    id(auto_increment)整数(255)

    displayname varchar(255)unique

    rank integer(255)default null

    体验bigint(255)

1 个答案:

答案 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,以使用此查询中的排名更新原始表。