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
作为两者的组合。
游戏中有多少分数记录是已知的值。
非常感谢你!完全从错误的角度去做,你的方式很棒! –