SQL表中基于用户的行顺序

时间:2015-07-29 16:47:22

标签: postgresql linked-list sql-order-by

用户应该能够以类似Excel的方式更改行顺序。现在行按id排序。所以我添加了另一列order

示例

1) Row A
2) Row B
3) Row C
4) Row D

现在Row A应该在Row B之后。

2) Row B
X) Row A
3) Row C
4) Row D

我需要计算新订单。因此我需要更新所有行!我不喜欢那样。

我可以使用10的小数间隔代替1

10.00) Row A
20.00) Row B
30.00) Row C
40.00) Row D

然后我可以像这样计算新订单:neworder = before + (after - before) / 2

Row A

之后

Row B

20.00) Row B
25.00) Row A
30.00) Row C
40.00) Row D
Row C

之后

...和Row B

20.00) Row B
22.50) Row C
25.00) Row A
40.00) Row D
Row D

之后

...和Row C

20.00) Row B
22.50) Row C
23.75) Row D
25.00) Row A

有没有更好的方法来处理这类问题?

修改 @Adam建议单链接的线性列表。它会完成这项工作。但是如何订购以及性能呢?

1 个答案:

答案 0 :(得分:0)

如果您将“订单”列更改为“上一列”记录,则每次重新排序只需要进行两次行编辑。要使用你的上一个例子:(我给第一行标记值'NULL'。)

B行后的A行

NULL) Row B
B) Row A
A) Row C
C) Row D

...和行B之后的行C(将行A更改为C,行C更改为B)

NULL) Row B
B) Row C
C) Row A
A) Row D

...和行C之后的行D(将行D更改为C和行A到D)

NULL) Row B
B) Row C
C) Row D
D) Row A