我需要做的是:
- 从表formfields
中删除一个条目
- 通过订购更新每个字段> (已删除字段的排序)
- 将更新字段的顺序设置为当前值减1(例如,如果字段上的当前排序为8,则应将其设置为7)。
这可能在一个查询中吗?或者我该如何实现呢?
答案 0 :(得分:8)
您可以设置一个事务来一次完成所有操作。
鉴于下表:
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;
答案 1 :(得分:3)
您显然无法在同一查询中执行DELETE
和UPDATE
,但您可以使用InnoDB,启动事务,运行删除查询,然后使用更新查询,例如。 ..
UPDATE formfields SET field_value = field_value - 1
WHERE field_value >= <VALUE YOU'VE JUST DELETED>
...在提交交易之前。
使用MyISAM表背靠背进行两次查询将在十次中完成九次(取决于负载等),但你真的不应该去那里。