[英]Best way to represent a ladder in a database
我需要代表階梯結果,該結果以前保存在網站上的excel表中。
梯子上的球員沒有得分。 如果玩家A擊敗玩家B,則玩家A將被放置在階梯中的玩家B上方。
我的問題如下:假設我有5位玩家,排名如下:
如果玩家5擊敗玩家1,則玩家5現在會在梯子的頂部移動。 如果玩家的順序是由排名數字決定的,那么我必須更新所有實際玩過的玩家之間的排名數字,這聽起來對我來說是錯誤的。
我有一個為每個玩家分配分數的想法,如果玩家A擊敗玩家B,那么玩家A得到玩家B的分數+ 1,那么排名是按降序排列的分數。 當玩家最終獲得相同的分數時,這相當有效。 我也可以通過在數據庫中添加“ LastUpdated”字段來解決該問題,以便最后更新的得分低於另一個得分(LastUpdated玩家實際上並沒有在相同得分上擊敗該玩家,他們只是移到了那里)。 然后,當一個人在同一天進行多次調整時,該操作將失敗,因此多個玩家最終獲得相同的分數,排名順序純粹取決於最后更新的玩家。 這是一個問題,因為要求管理員能夠自由上下移動播放器。 這也使得不可能在得分相同的玩家之間添加玩家(獲勝的玩家必須跳過整個組)。
我的最后一招是從數據庫中獲取當前排名,將其全部放在表格中,允許管理員將球員自由移動到他們想要的位置,然后執行一次保存操作即可獲取所有球員的當前排名,並且更新大家。 不過,這聽起來非常錯誤。
梯子中大約有160名玩家,因此操作不會特別冗長,只是聽起來是錯誤的。
那么,更改排名順序並將其保存在數據庫中的最佳方法是什么?
如果您的數據庫支持精確數字數據類型,則可以通過使排名列為精確數字來輕松解決。
然后,當玩家5擊敗玩家2時,您所要做的就是將玩家5的等級設置在玩家2與玩家1之間。 因為它是一個精確的數字,所以您的限制就是所選數據類型的精度限制。
樣本數據:
id name rank
1. Player 1 1.0
2. Player 2 2.0
3. Player 3 3.0
4. Player 4 4.0
5. Player 5 5.0
現在,玩家5擊敗了玩家2。因此,您所要做的就是將其等級設置為1.5,即介於玩家2的等級和高於玩家2的第一等級之間。 如果玩家4擊敗玩家1,我將其排名設為0.5,因為玩家1沒有人排名更高。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.