我在考虑在关系数据库表中简单地重新排序行。 我想避免这里描述的方法: How can I reorder rows in sql database
我的简单想法是使用类型为双精度64位IEEE 754浮点的ListOrder列。 在两个现有行之间插入一行时,我们将listOrder值计算为这些兄弟元素的平均值。
示例:
value, listOrder
a 1
b 2
c 3
d 4
e 5
f 6
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
value, listOrder
b 2
a 2.25
e 2.5
c 3
d 4
f 6
我有一个问题。我可以执行多少次插入(在边缘情况下)以获得正确排序的列表 对于64位整数,在同一位置的插入少于64位。 浮点类型是否允许更多插入?
所述方法还有其他问题吗? 您是否看到任何补丁/调整以使此想法在应用程序中安全可用?
答案 0 :(得分:1)
这类似于词法顺序,也可以使用varchar列来完成:
A B C D E F
变为
A B BM C D F
变为
B BF BM C D F
我更喜欢这两个步骤,在您移动的那一行之后更新表格中的每一行。 Sql对此很有效,更改后的行更新并不像看起来那么糟糕。你保留了一些人类可读的东西,你的序数值的存储大小是线性的,而不是你的数据大小,你不会冒险到达你没有足够的数量精确地将项目置于两个值之间