ArcadeScores
------------
ID
GameID
UserID
Score
Milliseconds
Rank
哪裏Rank
> 0且爲Score DESC then by Milliseconds ASC
(最好成績的指數計算方法始終是頭等,在同等分數的情況下,它的排名由誰做得最快)。
存儲Rank
是必需的,因爲它允許我執行快速查詢,如How many top 3 scores does userID 5 have?
。
重新計算Rank
爲當一個新的得分是通過訂購的所有記錄,循環每一個更新秩工程確定,而是通過每個記錄循環和每個記錄上執行更新查詢插入GameID
減慢,當你有幾千的記錄。對於一款流行的遊戲(特別是一個快速的遊戲,其中一個用戶可能每隔3秒發佈一個新的分數),這太昂貴了。
給定一個新的得分記錄,我需要確定它應該插入哪個位置。如果我們的新的記錄將是排名45
我們就可以通過一個增加它上面的每一條記錄是一個便宜得多的操作:
UPDATE ArcadeScores SET ScoreRank = ScoreRank + 1 WHERE gameID = " + myGameID + " AND ScoreRank >= 45
我在正在制定的一個記錄的等級難度記錄插入。僅在Score
或Milliseconds
單獨它很容易,但我努力使它發現正確的Rank
作爲兩者的組合。
遊戲中有多少分數記錄是已知的值。
非常感謝你!完全從錯誤的角度去做,你的方式很棒! –