我有一个高分(高分)系统,它根据玩家的经验计算位置。但现在我需要在网络上的其他地方使用玩家的排名,也许网络上的更多地方太像个人了高分,它将显示玩家在该技能方面的排名。
因此,只是循环&玩rank++这样的循环循环真的不起作用,因为我需要把这个rank存起来其他地方。
我可以做的是循环所有玩家,然后发送一个查询来更新该玩家的等级,但如果我有1000
玩家呢?还是更多?这意味着每次加载CCD_ 2个查询。
我曾想过,如果有一个SQL查询,我可以在一两个查询中使用它来执行相同的操作。
我该怎么做?我通过玩家的经验排序来计算排名,所以我的表结构如下:
表格:
-
玩家
id(auto_increment)integer(255)
displayname varchar(255)唯一
秩整数(255)默认空
经验bigint(255)
这应该为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,用这个查询的秩更新原始表。