我正在制作一个PHP战斗系统,并需要对排名进行排序。排名系统的数据库结构
我想要它的工作方式是说有100名玩家,而你的等级是90.你可以挑战5级以上的玩家,所以说你挑战并击败85级玩家,然后你成为85级, 86.
我不知道如何用数据库做到这一点。如何设定或存储等级。很显然,我不能用你的'等级'保存一个领域,因为如果你赢了,它必须在数据库中编辑你下面的每一个球员级别,不是吗?
任何想法都会有所帮助。
我正在制作一个PHP战斗系统,并需要对排名进行排序。排名系统的数据库结构
我想要它的工作方式是说有100名玩家,而你的等级是90.你可以挑战5级以上的玩家,所以说你挑战并击败85级玩家,然后你成为85级, 86.
我不知道如何用数据库做到这一点。如何设定或存储等级。很显然,我不能用你的'等级'保存一个领域,因为如果你赢了,它必须在数据库中编辑你下面的每一个球员级别,不是吗?
任何想法都会有所帮助。
我建议你做保持秩场和放松的瓶颈在查询:
在您的例子使用类似
UPDATE players
SET rank=IF(playerid=<id-of-challengin-player>,rank-5,rank+1)
WHERE rank>=85 AND rank<=90
这将改变行列
old new
85 86
86 87
87 88
88 89
89 90
90 85
它看起来像你想要的,但使用一个查询,它可以利用索引,只触及6行。
编辑
维修方便(固定等级号码,如果有洞等),运行
CREATE VIEW players_by_rank AS
SELECT * FROM players ORDER BY rank
一次,然后用
UPDATE (SELECT @newrank:=0) AS init, players_by_rank
SET score=(@newrank:[email protected]+1)
,收在缺口桌子。请注意,这触及所有行!
由于您描述的'等级'不是基于任何其他规则,如点。可以计算的东西,您必须在任何地方存储此等级。
而且,这确实意味着你需要每次更新一大堆记录;但既然你提到你只能挑战多达5个位置在你前面,这也意味着你永远只能有更新6条每次..(没什么大不了)
90 -> 85
89 -> 90
88 -> 89
87 -> 88
86 -> 87
85 -> 86
你确实可以在数据库中有一个排名栏,并沿着以下方向更新:update yourtable set playerRank=playerRank+1 where playerRank>85
然后将获胜的玩家更新为玩家排名85.这可能会触及很多记录,但这不会是一个沉重的代价到数据库。
谢谢,我没'不知道它只会更新6,我错误地认为它将不得不编辑下面的所有级别。 – user1022585 2012-07-06 09:48:55
如果一条记录也被删除了,那就会搞砸了:o – user1022585 2012-07-06 09:57:19
你通常不是通过真正删除记录来解决这个问题(起初),而是设置一个字段,比如'SET active = 0'。然后你运行'UPDATE players SET rank = IF(playerid = [删除玩家ID], - 1 * rank,rank-1)WHERE rank> [删除玩家等级]',在那里你可以删除它没有伤害。 – 2012-07-06 10:01:48