gpt4 book ai didi

algorithm - 在数据库中表示阶梯的最佳方式

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:21:16 26 4
gpt4 key购买 nike

我需要在网站上展示以前保存在 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 没有排名更高的人。

关于algorithm - 在数据库中表示阶梯的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33633366/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com