【问题标题】:multiple auto increment in mysqlmysql中的多个自动增量
【发布时间】:2011-10-28 10:55:10
【问题描述】:

我正在使用 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 列的信息吗?
  • 您究竟需要第二个 auto_increment 列做什么?我不明白这背后的原因。
  • 如果您能详细说明使用方法,也许我们可以提出更好的替代方案。

标签: php mysql sorting auto-increment


【解决方案1】:

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

【讨论】:

  • 取决于实际使用情况,但有时排序顺序实际上是 imo 数据模型的一部分。考虑一个画廊。是的,排序顺序与展示有关,但它也是模型的一部分,因为展示顺序对整个画廊来说既随意又重要。您不能只使用主键或时间戳,因为这些值是静态的。在这种情况下,排序键非常有意义。
【解决方案2】:

您可以在 sort_order 中存储 0,然后按 sort_order + id 排序。结果将是相同的,因为 sort_order 将是精确的 0 而不是 idid 上更少)

【讨论】:

    【解决方案3】:

    默认情况下,您可以将 sort 列设为 NULL。您唯一需要的是更智能的查询。例如:

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

        【讨论】:

        • 该链接不再可用。否决它。
        猜你喜欢
        • 2012-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-14
        相关资源
        最近更新 更多