表中有一些项目,希望用户可以自己定义这些项目的种类。
所以我在表中添加了sortValue (Int )字段,表可能

name   sortValue
Jack       3
Paul       1
April      30
Alic       25


并且我使用以下代码显示按使用定义的项目排序。

Select name, sortValue from myTable order by sortValue


结果将是

name   sortValue
Paul       1
Jack       3
Alic       25
April      30


我发现很难通过数据结构来更改这些项目的顺序。

例如:

我希望记录(name=Alic, sortValue=25)位于第二位置。我必须将记录更新为(name=Alic, sortValue=2)

结果将是

name   sortValue
Paul       1
Alic       2
Jack       3
April      30


如果我下次需要记录(name=April, sortValue=30)在第二个位置,我发现我没有该记录的sortValue!

最佳答案

您可以对sortValue列使用浮点类型,因此,总是会有一个空格在其他两个之间插入新值。

# if record is between others
sortValue = (prevSortValue + nextSortValue)/2

# if record is last
sortValue = prevSortValue + 1


当您用完浮点精度时,理论上可能会遇到与整数相同的问题。但是实际上,这很大程度上取决于您在其他记录之间插入记录的频率。尤其是当您在同一记录附近有很多插入内容时。

仅更新现有记录以将新记录放置在正确的位置似乎效率很低,因为update的操作比insert昂贵得多,并且需要锁定记录,而您不必修改。

07-26 04:08