【发布时间】:2011-04-03 15:56:08
【问题描述】:
我需要做的是:
- 从表中删除一个条目formfields
- 使用排序更新每个字段>(已删除字段的排序)
- 将更新字段的顺序设置为当前值减 1(例如,如果字段的当前顺序为 8,则应设置为 7)。
这可能在一个查询中吗?或者我怎样才能做到这一点?
【问题讨论】:
标签: php mysql sql-delete
我需要做的是:
- 从表中删除一个条目formfields
- 使用排序更新每个字段>(已删除字段的排序)
- 将更新字段的顺序设置为当前值减 1(例如,如果字段的当前顺序为 8,则应设置为 7)。
这可能在一个查询中吗?或者我怎样才能做到这一点?
【问题讨论】:
标签: php mysql sql-delete
您可以设置一个事务来一次性完成所有这些操作。
给定下表:
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;
【讨论】:
您显然不能在同一查询中执行DELETE 和UPDATE,但您可以使用 InnoDB,启动事务,运行删除查询,然后使用更新查询,例如...
UPDATE formfields SET field_value = field_value - 1
WHERE field_value >= <VALUE YOU'VE JUST DELETED>
...在提交事务之前。
使用 MyISAM 表背靠背执行两个查询将工作十分之九(取决于负载等),但你真的不应该去那里。
【讨论】: