我需要做的是:-从表formfields中删除一个条目-使用排序更新每个字段>(已删除字段的排序)-将更新字段的排序设置为当前值减1(例如,如果字段上的当前排序为8,则应设置为7)。
这可以在一个查询中实现吗?或者我怎样才能做到这一点?
发布于 2011-04-04 01:35:19
您可以设置一个事务来一次完成所有这些操作。
给出下表:
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;发布于 2011-04-04 00:00:05
显然,您不能在同一查询中执行DELETE和UPDATE,但是您可以使用InnoDB,启动一个事务,运行delete查询,然后使用一个更新查询,例如...
UPDATE formfields SET field_value = field_value - 1
WHERE field_value >= <VALUE YOU'VE JUST DELETED>提交事务的...prior。
使用MyISAM表背靠背地执行这两个查询,十有八九是有效的(取决于负载等),但是您真的不应该这样做。
https://stackoverflow.com/questions/5530676
复制相似问题