2014-09-25 53 views
3

我是一個全新的編程初學者。 我只是製造了一個供個人使用的系統。 有可能增加兩名球員的比賽結果。ELO評級 - mysql設計

到目前爲止一切正常。 現在我想添加一個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,然後劇本應該改變評分,如 從一場比賽之前和之後兩場比賽中獲得兩名選手的評分1。這將是P1:1231,P2:1169 然後在刪除遊戲後重新計算所有等級。 所以Game3,玩家獲勝,評級應該是P1:1198,P2:1202

我不能只是刪除game2,它的評級差異......評級必須從之前的遊戲和所有遊戲後重新計算。

更復雜的是,如果有3個或更多的玩家,他們在我想刪除的遊戲後玩過遊戲。 因爲他們的評分已經改變。如果一個遊戲被刪除,那麼所有後來玩過的遊戲的評分變化都應該被逐一重新計算。

我希望我的問題是清楚的...

所以thew問題是,你能告訴我,PHP的一個完整的起動/ .mysql應該是什麼數據庫計算的邏輯和過程的提示我的情況收視率。

在此先感謝。

+0

馬克,對不起,我不完全清楚我的問題。問題是 - 你能幫我提示我應該如何設計我的數據庫? 目前我有一個球員表和一個遊戲桌。我應該如何實施評級數據?它應該是一張新桌子還是其他的......我無法弄清楚,我應該如何組織數據庫中的數據......我對mysql/php的可能性知之甚少。我需要一些幫助。 我認爲這是一個地方要求這樣的建議。 – OGlv 2014-09-25 16:31:22

+0

@MarcB:他們不希望我們設計完整的系統。他們要求提示和建議。這沒有錯。 – georg 2014-09-25 16:40:44

回答

1

基本上會有兩個表格:players(name,whatever else,rating)games(player_id_white,player_id_black,result=1,0,-1,date)

遊戲被刪除後,將所有玩家的評分重新設置爲初始值並從頭開始重新計算。只需閱讀按日期排序的遊戲桌面,更新內存中的評分並最終將它們寫回玩家表。

這是一個簡單明瞭的解決方案,但應該爲你工作,除非(直到)你有成千上萬的玩家和數以百萬計的遊戲。

+0

太好了,謝謝!我沒有這樣想過!我會想出來的! :) – OGlv 2014-09-25 17:05:14