重新排序sql数据库中的行 - idea

时间:2017-05-25 21:45:27

标签: sql algorithm math numeric

我在考虑在关系数据库表中简单地重新排序行。 我想避免这里描述的方法: 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位。 浮点类型是否允许更多插入?

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

1 个答案:

答案 0 :(得分:1)

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

A
B
C
D
E
F

变为

A
B
BM
C
D
F

变为

B
BF
BM
C
D
F

我更喜欢这两个步骤,在您移动的那一行之后更新表格中的每一行。 Sql对此很有效,更改后的行更新并不像看起来那么糟糕。你保留了一些人类可读的东西,你的序数值的存储大小是线性的,而不是你的数据大小,你不会冒险到达你没有足够的数量精确地将项目置于两个值之间