自动增量排序

时间:2012-01-23 09:19:57

标签: php mysql database forms select

我有一个带有自动递增ID的表,它对行进行排序。我创建了一个表单,您可以在其中更改行的顺序。

ID 项目
1 - 行a
2 - 行b
3 - 行c
4 - 行d


但主键(自动增量)不允许如下所示的双精度数:

ID 项目
1 - 行a
2 - 行b
2 - 行c
4 - 行d


有没有办法使用mysql或php sript更改顺序,以便我可以重新排列顺序:

ID 项目
1 - 行a
2 - 行b
3 - 第d行
4 - 第c行

    在上面的示例中,行d和c已经改变,例如。行c向上移动1,向下移动1向下移动。

    任何帮助将不胜感激!

更新

行是动态的。如果,例如,项目c被删除,则计数将为1,2,4。如果某些项目被删除,您会如何缩小差距?

3 个答案:

答案 0 :(得分:4)

添加订单字段并将其用于订购

ID商品订单

1 - 项目a - 1

2 - 项目b - 2

3 - 项目c - 4

4 - 项目d - 3

SELECT * FROM table ORDER BY order

答案 1 :(得分:0)

除了唯一标识其中的记录外,表的ID列不起作用。如果要访问3号记录,则记录号3应始终为同一记录。如果您删除了3号记录,那么有人试图检索它,它应该返回记录号3不再存在的事实,而不是其他记录为其ID分配值3的事实。

您需要记住,自动增量主键仅用于识别目的,并且不会在数据中用于其他语义目的。除了检索特定记录并确保所有记录在某种程度上都是唯一的,它们可以被安全地忽略。

如果您需要的数据需要按特定顺序排列,则可以使用ORDER BY指定要排序的列。如果您的列都没有提供足够的数据来进行排序,那么请考虑添加一个' sort'列中包含项应该在结果集中的顺序的值,然后ORDER BY该列。

答案 2 :(得分:-2)

如果你想缩小差距,不要让Id字段自动递增,当插入新行时从表中获取最大id条目并向其添加1,在这种情况下,删除某些行时将没有间隙介于两者之间。