2017-03-17 84 views
1

大家好!我正在制作一个简单的待办事项应用程序。我停止了这个问题。我想让用户更改列表中元素的顺序(将其保存到数据库中)。保留表中的商品顺序

一个第一想法是:

创建一个列(为了),每次更改它,当用户做一些事情。 我们有几条记录是好的,但更大的数字是什么? 我的想法:

id | name | order 
1 | lorem| 1 
2 | ipsum| 2 
3 | dolor| 3 

当用户改变“悲”到第一位置,脚本必须更新所有的记录。 这不是我认为的最佳解决方案。 任何人都可以分享知识如何优化? 我将不胜感激!

+1

[使用数据库表中的排序顺序列](http://stackoverflow.com/questions/8607998/using-a-sort-order-column-in-a-database-table) – SqlZim

+0

可能的重复[在数据库表中使用排序顺序列](http://stackoverflow.com/questions/8607998/using-a-sort-order-column-in-a-database-table) – philipxy

回答

0

您可以使用名为nextprevious的列。这称为链接列表,或者如果同时使用双重链接列表。请参阅:

https://en.wikipedia.org/wiki/Doubly_linked_list

移动一个记录,在数据库表中的一个步骤将包括两个步骤:

  1. 从订单中删除记录。
  2. 将记录重新插入订单。

总而言之,您总是需要对双链表进行五次记录更改,并且对于链表最少需要三次记录。

+0

这不是SQL' ish解决方案。 –

0

如果要将这些数据存储在数据库中,那么“排序”列是适当的。

无论何时更新或插入表格,您都需要更新此列(不需要删除)。通常,您需要更新更改后的行的所有行。触发器可以完成这项工作。

对于几十甚至几百行(取决于数据库的强大程度),循环遍历行可能是正确的。所以,根据列表的长度,这可能会很好。

任何增强都取决于其他因素。一些我能想到的:

  • 这些列表真的会有多大?
  • 什么样的转换最重要? (交换?插入?删除?更新?)
  • 转换是否会批量发生?
  • 多个用户是否会同时更改列表。