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

标签 sql algorithm math numeric

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

我的简单想法是使用 double 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 次。 浮点类型是否允许更多插入?

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

最佳答案

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

A
B
C
D
E
F

成为

A
B
BM
C
D
F

成为

B
BF
BM
C
D
F

我更喜欢两步过程,在该过程中,您在移动的行之后更新表中的每一行,使其变大。 SQL 在这方面是高效的,在更改后更新行并不像看起来那么糟糕。您保留了一些更易读的东西,您的序数值的存储大小与您的数据大小成线性比例关系,并且您不会冒险达到您没有足够的精度将项目放在两个之间的地步值(value)观

关于sql - 重新排序 sql 数据库中的行 - 想法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44190306/

相关文章:

mysql - 插入MySQL表或更新(如果存在)

mysql - 如何在外键约束中组合字段

android - SQLite 外键

mysql - 如何根据另一列的值在 SQL 选择查询中创建/添加列?

language-agnostic - 日期范围与可空日期重叠

java - Java围绕另一个点旋转一个点

java - 找到所有路径(和最短路径)的迷宫算法

java - 在文档中查找单词序列

algorithm - 比较排序算法在最坏的情况下需要 Ω(nlgn) 比较

algorithm - 对数大 O 与平方根