表中有一些项目,希望用户可以自己定义这些项目的种类。
所以我在表中添加了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
昂贵得多,并且需要锁定记录,而您不必修改。