【问题标题】:Updating an "order" column MySQL?更新“订单”列 MySQL?
【发布时间】:2012-10-09 12:44:05
【问题描述】:

更新“订单”列的最佳方式是什么?

假设我有一个 0 到 9 的 id 列,以及从 0 到 9 的 order 列。

目前,它在数据库中为: 0 0、1 1、2 2 等

我的 HTML 页面发布了它想要的新顺序:0 8、1 3、2 6 等(这是完全随机的,由用户决定)。

进行更新的最佳方式是什么?

我可以循环并为每个更新运行。 我还可以创建一个包含所有对的临时表,然后根据子查询进行更新。

但我觉得我忘记了一些可以更快完成的微不足道的事情。有什么建议吗?

【问题讨论】:

    标签: sql mysql


    【解决方案1】:

    你必须自己更新每一行,没有办法在sql中做一个“地图”更新。

    (有一些技巧,但它们在这里并没有真正应用/帮助。)

    【讨论】:

    • 谢谢,虽然没有更清洁的解决方案但没什么大不了,这似乎很奇怪。
    • 我知道你的意思,但这就是关系数据库的工作方式。您可以在某些系统上使用一个技巧,即传入“映射”将其转换为表,然后在更新中加入该表。在这种情况下完全不值得。
    【解决方案2】:

    如果用户真的在随机重新排序项目,那么您无能为力。但通常用户可能会对现有排序进行小修改,例如将列表中的一项向上移动。在这种情况下,您可以通过放宽排序顺序列必须包含连续整数的约束来稍微提高速度。我在here 之前讨论了一个可能的想法,如果您对如何实现它的细节感兴趣,可以阅读该建议。

    但对于大小为 10 的列表,可能不值得付出额外的努力。做你正在做的事情 - 在实践中可能会很好。

    【讨论】:

    • 是的,这些通常会很短,所以效率不是最大的问题。我想要一个比运行 10 次更新更干净的选项,但我想没有什么理想的。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 2021-12-08
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    相关资源
    最近更新 更多