繁体   English   中英

交换SQLite数据库中的项目顺序

[英]Swap the order of items in a SQLite database

我从Sqlite数据库中的项目表中检索有序的项目列表。 我如何交换id以使Sqlite数据库表中的两个项的顺序?

id不应该确定位置或排序。 它应该是一个不可变的标识符。

如果需要在数据库中表示顺序,则需要创建另一个orderNumber列。 一对选项是(1)具有跨越范围的值或(2)具有指向下一个的指针(如链接列表)。

对于范围:跨越范围可帮助您避免在插入点之后为所有项重写orderNumber列。 例如,在范围内,插入第一个获得1,插入第二个获取最大范围,在第一个和第二个之间插入第三个获得中间数字 - 如果重新定位,则必须分配它们之间的项目的中间点。 一个缺点是如果列表获得足够的流失(最小化跨度),您可能必须重新平衡范围。 这个解决方案的专家是你可以通过在sql语句中按此列排序来获得有序列表。

对于链表:如果数据库的下一列指向顺序后面的id,则需要更新几行以插入内容。 好处是它很简单。 下行是你不能在sql语句中订购 - 你依赖于获取列表的代码来排序它。

另一个变体是您可以将有序列表数据完全从该表中提取出来。 例如,您可以拥有一个有序列表表,其中包含listid,itemid,orderedNumber。 这允许您在其引用的表中具有一个或多个逻辑有序列表。

其他一些参考:

如何存储经常改变DB位置的订购商品

在保持订购的同时将有序列表保存到数据库的最佳方法

https://dba.stackexchange.com/questions/5683/how-to-design-a-database-for-storing-a-sorted-list

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM