Mysql自己的订单保存在一列中

时间:2014-08-07 09:56:58

标签: mysql sql-order-by

我有一个看起来像的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

1 个答案:

答案 0 :(得分:0)

这几乎就是我们在我们网站上使用名为position的列的方式,尽管我们使用的是基于1而不是0的位置。

更改位置的逻辑实际上相当复杂。所以当我们拖放更改网格视图中的位置时,我们会将组中所有项ID的有序数组(在新位置)发送到服务器并更新每一行的位置(有些保持不变)。

我们也只允许在前面添加行(设置位置1并将所有现有位置向上移动1)或后面(设置位置为max + 1)。然后,用户可以将该行拖放到网格视图中所需的位置。

这可能会在某些时候重构,但目前不会引起问题,而且代码相当轻。