MySQL中的多个自增字段

6
我正在使用PHP和MySQL。我有一个表,其中id列设置为自动递增的主键。我正在尝试添加另一列称为sort_order。当插入行时,sort_order列应自动递增。然后用户将能够更改sort_order值。但是MySQL不允许为多个列自动递增?
最佳方法是如何自动递增sort_order值?
按照常规请求,这里有更多的解释。
在管理区域,用户将获得一个类别列表。使用JavaScript,用户可以拖动他们希望类别的顺序。然后脚本发布新顺序中所有ID和旧顺序中的sort_order值的列表。
然后,我有一个PHP函数,它用新的sort_order值更新mysql。
所有这些都已经完成,除了我手动填写了所有sort_order值。我希望它能够在用户创建新类别时具有价值。
然后,我可以使用sort_order正确显示前端类别顺序。
我已经完成了所有工作。但在开发中,我手动填写了sort_order的值。

你能否多讲一些关于如何使用“sort_order”列的细节? - Jonathan M
2
你为什么需要第二个自动增量列?我不理解这背后的原因。 - pkk
如果您能详细说明用法,也许我们可以建议更好的替代方案。 - ThinkCode
5个回答

7
您可以将您的排序列默认设置为NULL。您需要的只是一个更加智能的查询语句。例如:
select * 
from something
order by ifnull(sort, id)

1

您可以使用触发器在插入时更新行,或在生成查询时选择适当的值。

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


1
也许可以添加一个时间戳并按照它进行排序,这实际上为您的数据模型增加了意义。 "sort_order"列意味着您正在将演示(视图)逻辑放入数据模型中,这是不好的事情。

1
根据实际使用情况而定,但有时排序顺序实际上是数据模型的一部分。考虑一个画廊。是的,排序顺序与展示相关,但它也是模型的一部分,因为呈现顺序对整个画廊都是任意且重要的。您不能仅使用主键或时间戳,因为这些值是静态的。在这种情况下,排序键非常合理。 - pzuraq

0

您可以将 0 存储在 sort_order 中,然后按 sort_order + id 进行排序。结果将是相同的,因为 sort_order 将精确为 0 而不是 id(小于 id)。


-2

1
该链接已不再可用。我会将其投下反对票。 - The Impaler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接