【问题标题】:Can SQL handle something like this natively? Order fieldSQL 可以原生处理这样的事情吗?订单字段
【发布时间】:2011-05-24 14:23:32
【问题描述】:

我的数据库中有一个名为“order”的字段,它表示图像在页面上出现的顺序。图像的顺序是用户可编辑的,因此在导入它们后,用户可以更改它们。所以假设我将这些图像排序为 1,2,3,4,5,6,7,8....并且用户将第 8 个位置的图像移动到第 3 个位置....有没有在 SQL 中更新所有其他记录以向上移动一个位置的方式,而无需在 PHP 中读取每个项目,编辑它们,然后将它们放回去?

所以在这种情况下,位置 1 和 2 的图像保持不变....8 变为 3...3 变为 4,4 变为 5,依此类推

【问题讨论】:

  • 我会将字段名称 order 更改为 image_order 之类的名称,否则它将与 SQL 关键字 ORDER 冲突(如果您还没有遇到过)

标签: php sql


【解决方案1】:

你可以试试+1

喜欢

1.) update tablename set `order` = `order` + 1 where `order` >= 3
2.) update tablename set `order` = 3 where `order` = 9; ie ( 8 + 1 )

【讨论】:

    【解决方案2】:

    是的,这是一个简单的更新语句:

    UPDATE images SET order = order + 1 WHERE order > 3 and order < 8
    

    除此之外,您当然需要将原始行从 8 移动到 3。

    【讨论】:

    • 您的语句只在 2 和 4 之间创建了一个“洞”,您还需要更新正在移动的那个:UPDATE images SET order = 3 WHERE order = 8
    【解决方案3】:
    update table set pos = case when pos = 8 then 3 else pos + 1 end where pos >= 3
    

    【讨论】:

      【解决方案4】:

      如果优先数减少:

      UPDATE table SET prio = prio + 1 WHERE prio <= $new_prio
      

      如果增加:

      UPDATE table SET prio = prio - 1 WHERE prio >= $new_prio
      

      【讨论】:

        猜你喜欢
        • 2013-06-26
        • 1970-01-01
        • 1970-01-01
        • 2023-04-10
        • 1970-01-01
        • 2014-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多