【问题标题】:Updating a mysql-table. one field = old_value - 1更新 mysql 表。一个字段 = old_value - 1
【发布时间】:2011-04-03 15:56:08
【问题描述】:

我需要做的是: - 从表中删除一个条目formfields - 使用排序更新每个字段>(已删除字段的排序) - 将更新字段的顺序设置为当前值减 1(例如,如果字段的当前顺序为 8,则应设置为 7)。

这可能在一个查询中吗?或者我怎样才能做到这一点?

【问题讨论】:

    标签: php mysql sql-delete


    【解决方案1】:

    您可以设置一个事务来一次性完成所有这些操作。

    给定下表:

    CREATE TABLE `formfields` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(25) NOT NULL,
      `order_no` int(11) NOT NULL,
      PRIMARY KEY (`id`)
    );
    

    您可以执行以下操作:

    START TRANSACTION;
    DELETE FROM formfields WHERE order_no = {YOUR_NUM};
    UPDATE formfields SET order_no = order_no - 1 WHERE order_no > {YOUR_NUM};
    COMMIT;
    

    【讨论】:

      【解决方案2】:

      您显然不能在同一查询中执行DELETEUPDATE,但您可以使用 InnoDB,启动事务,运行删除查询,然后使用更新查询,例如...

      UPDATE formfields SET field_value = field_value - 1 
      WHERE field_value >= <VALUE YOU'VE JUST DELETED>
      

      ...在提交事务之前。

      使用 MyISAM 表背靠背执行两个查询将工作十分之九(取决于负载等),但你真的不应该去那里。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-06
        • 2015-10-03
        相关资源
        最近更新 更多