更新mysql表。一个字段= old_value - 1

时间:2011-04-03 15:56:09

标签: php mysql sql-delete

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

这可能在一个查询中吗?或者我该如何实现呢?

2 个答案:

答案 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)

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

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

...在提交交易之前。

使用MyISAM表背靠背进行两次查询将在十次中完成九次(取决于负载等),但你真的不应该去那里。