我是一个全新的编程新手。我刚做了一个供个人使用的系统。可以添加两名选手的体育比赛结果。
到目前为止,一切运行正常。现在我正在考虑添加一个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所以,然后我意识到,第二场比赛有错误的数据,我想删除它。
应该发生什么?我删除了game2,然后脚本应该改变两个球员的评级,如抢夺评级从一场比赛之前,从后game1。这将是P1:1231,P2: 1169,然后在删除的游戏之后重新计算所有评级。所以Game3,玩家获胜,评分应该是P1:1198,P2:1202
我不能删除game2和它的评分差异...评级必须重新计算从前一场比赛,并为所有游戏后发挥。
如果有3个或更多的玩家,并且他们在我想要删除的游戏之后玩过游戏,事情就会变得更复杂。因为他们的评级发生了变化。如果一个游戏被删除了,那么之后玩的所有游戏的评分变化都应该逐一重新计算。
我希望我的问题清楚了..。
所以问题是,你能不能给我一个完整的php/.mysql初学者的提示,应该是什么是数据库的逻辑和我的情况下计算评级的过程。
提前谢谢。
发布于 2014-09-26 00:48:40
基本上,将有两个表:players(name,whatever else,rating)和games(player_id_white,player_id_black,result=1,0,-1,date)。
删除游戏后,将所有玩家的评分重新设置为初始值,并从头开始重新计算。只需读取按日期排序的游戏表,更新内存中的评级,最后将它们写回玩家表。
这在某种程度上是简单而粗糙的解决方案,但应该对你有效,除非(直到)你有成千上万的玩家和数百万的游戏。
https://stackoverflow.com/questions/26043337
复制相似问题