我有一个带有自动递增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行
更新
行是动态的。如果,例如,项目c被删除,则计数将为1,2,4。如果某些项目被删除,您会如何缩小差距?
答案 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,在这种情况下,删除某些行时将没有间隙介于两者之间。