【问题标题】:Reordering rows in sql database - idea重新排序 sql 数据库中的行 - 想法
【发布时间】:2017-05-25 21:45:26
【问题描述】:

我正在考虑对关系数据库表中的行进行简单的重新排序。 我想避免这里描述的方法: How can I reorder rows in sql database

我的简单想法是使用双精度 64 位 IEEE 754 浮点类型的 ListOrder 列。 在两个现有行之间插入一行时,我们计算 listOrder 值作为这些兄弟元素的平均值。

示例:

1。起始状态:

value, listOrder
a       1
b       2
c       3
d       4
e       5
f       6

2。将“e”向上移动两行

e-row 上的一个简单 sql 更新:update mytable set listorder=2.5 where value='e'

value, listOrder
a       1
b       2
e       2.5
c       3
d       4
f       6

3。将“a”向下移动一个位置

value, listOrder
b       2
a       2.25
e       2.5
c       3
d       4
f       6

我有一个问题。我可以执行多少次插入(在边缘情况下)以获得正确排序的列表。
对于 64 位整数,在同一位置插入少于 64 次。 浮点类型是否允许更多的插入?

所描述的方法还有其他问题吗? 您是否看到任何补丁/调整以使这个想法在应用程序中安全且可用?

【问题讨论】:

    标签: sql algorithm math numeric


    【解决方案1】:

    这类似于词法顺序,也可以使用 varchar 列来完成:

    一种 乙 C D 乙 F

    变成

    一种 乙 BM C D F

    变成

    乙 高炉 BM C D F

    我更喜欢两步过程,在该过程中,您在将表中的每一行移动为更大的行之后更新表中的每一行。 Sql 在这方面是有效的,在更改后更新行并不像看起来那么糟糕。您保留了更易于阅读的内容,序数值的存储大小与数据大小成线性关系,并且您不会冒险到没有足够精度将项目放在两个之间的风险价值观

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-01
      • 2023-03-19
      • 2023-03-10
      • 2020-09-23
      相关资源
      最近更新 更多