2011-08-16 30 views
6

我使用的是php和mysql。我有一个ID列设置为自动增量作为主键的表。我试图添加另一个名为sort_order的列。插入行时,sort_order列应该自动增加。然后用户将能够更改sort_order值。但MySQL不允许自动增加多个列?mysql中的多个自动增量

什么是自动增加sort_order值的最佳方式?

通过热门请求,一些更多的解释。

在管理区域中,用户将拥有一个类别列表。使用javascript,用户可以拖动他们想要的类别的顺序。脚本然后发布新顺序中的所有id的列表,以及旧顺序中的sort_order值。

然后我有一个php函数,它用新的sort_order值更新mysql。

所有这些都已经完成,除了我手动填写了所有sort_order值。我希望它能够在用户创建新类别时具有价值。

然后,我可以使用sort_order在前端正确显示类别顺序。

我已经做好了一切。但是在开发中,我手动填充sort_order的值。

+0

你能告诉我们更多关于你如何使用'sort_order'列吗? –

+2

究竟需要第二个auto_increment列?我不明白这背后的推理。 – pkk

+0

如果您可以详细了解使用情况,可以建议更好的替代方案。 – ThinkCode

回答

1

您可以使用trigger插入时更新您的行,或者选择在查询产生的时间在PHP代码中适当的值。

但是,您应该考虑是否真的需要创建自动递增的sort_order值。在你的显示代码中,你可以对已经被赋予显式排序顺序的项目进行排序,并将剩余的未排序项目放在列表中的适当位置(底部?)。

7

默认情况下,您可以将排序的列等于NULL。你唯一需要的是一个更聪明的查询。例如:

select * 
from something 
order by ifnull(sort, id) 
0

您可以在排序顺序排序sort_order + id存储0,然后。结果将是相同的,因为sort_order将精确为0而不是id(在id上减去)

1

也许添加一个时间戳并对其进行排序,这实际上为您的数据模型增加了含义。 “sort_order”列意味着您要将演示(视图)逻辑放入您的数据模型中,这是一件糟糕的事情。

+0

取决于实际使用情况,但有时排序顺序实际上是数据模型imo的一部分。考虑一个画廊。是的,排序顺序与演示有关,但它也是模型的一部分,因为演示顺序对整个画廊来说都是任意的和重要的。你不能只用主键或时间戳,因为这些值是静态的。在这种情况下,分拣键很有意义。 – pzuraq