ELO评级 - mysql设计

时间:2014-09-25 16:14:55

标签: php mysql database-design rating

我是编程方面的全新入门者。 我刚刚制作了一个供个人使用的系统。 有可能添加两名球员的运动比赛结果。

到目前为止一切正常。 现在我想添加一个ELO评级系统。

我无法理解,我应该如何设计我的数据库。

问题是,我无法理解,如果任何游戏结果将被随时删除,如何保持正确的评级计算记录。例如,有人会添加有缺陷的数据,应该删除游戏条目。

那么,如何设计数据库,如果我从条目中间删除任何游戏,评级将正确重新计算?

我的问题的一个说明性示例,我无法解决(评级计算仅提供信息):

 Player1 (rating 1200), Player2 (1200)
 Game1 played, player1 wins.
 Rating after game: P1:1231, P2:1169
 Game2 played, Player1 wins.
 Rating: P1:1259, P2:1141
 Game3, Player2 wins
 Rating: P1:1220, P2:1180

所以,我意识到,游戏2有假数据,我想删除它。

应该怎么办? 我删除了game2,然后脚本应该改变评级 从比赛之后的一场比赛中获得两名球员的评分。这将是P1:1231,P2:1169 然后在删除的游戏后重新计算所有评级。 所以Game3,玩家获胜,评分应为P1:1198,P2:1202

我不能只删除game2及其评分差异...评级必须从之前的游戏重新计算,并且在游戏结束后进行所有评分。

如果有3个或更多玩家,它会变得更复杂,并且他们在我要删除的游戏之后玩游戏。 因为他们的收视率发生了变化。如果游戏被删除,那么之后播放的游戏的所有评级变化都应该逐一重新计算。

我希望我的问题很明确......

所以问题是,你能不能给我一个完整的php / .mysql启动器,提示数据库的逻辑和计算我的情况评级的过程。

提前致谢。

1 个答案:

答案 0 :(得分:1)

基本上,会有两个表:players(name,whatever else,rating)games(player_id_white,player_id_black,result=1,0,-1,date)

删除游戏后,将所有玩家的评分重置为初始值并从头开始重新计算。只需阅读按日期排序的游戏表,更新内存中的评级,最后将它们写回到玩家表中。

这在某种程度上是直截了当的原始解决方案,但除非(直到)你有数千名玩家和数百万游戏,否则应该适合你。