我有一个看起来像的mysql表:
id name
0 Test1
1 Test2
2 Test3
3 Test4
4 Test5
我希望拥有的是定义用户定义的订单。所以它应该是可能的 1)在定义的位置插入一个新行 2)改变现有行的位置
我知道这可以通过使用REPLACE INTO
来实现问题是我不想为此更改主键(id),因为它是其他Joints的一部分。所以我的意图是添加一个新的列“订购” - 但我怎么能管理它以获得我想要的功能?或者是否有完全不同的解决方案?
添加列的示例:
id name ordering
0 Test1 0
1 Test2 1
2 Test3 3
3 Test4 4
4 Test5 5
5 Test6 2
答案 0 :(得分:0)
这几乎就是我们在我们网站上使用名为position的列的方式,尽管我们使用的是基于1而不是0的位置。
更改位置的逻辑实际上相当复杂。所以当我们拖放更改网格视图中的位置时,我们会将组中所有项ID的有序数组(在新位置)发送到服务器并更新每一行的位置(有些保持不变)。
我们也只允许在前面添加行(设置位置1并将所有现有位置向上移动1)或后面(设置位置为max + 1)。然后,用户可以将该行拖放到网格视图中所需的位置。
这可能会在某些时候重构,但目前不会引起问题,而且代码相当轻。