簡體   English   中英

在數據庫中表示梯形圖的最佳方法

[英]Best way to represent a ladder in a database

我需要代表階梯結果,該結果以前保存在網站上的excel表中。

梯子上的球員沒有得分。 如果玩家A擊敗玩家B,則玩家A將被放置在階梯中的玩家B上方。

我的問題如下:假設我有5位玩家,排名如下:

  1. 玩家1
  2. 玩家2
  3. 玩家3
  4. 玩家4
  5. 玩家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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM