UPDATE forms SET
pos = (SELECT MIN(pos)-1 FROM forms)
WHERE id=$id
这不起作用,错误消息:mysql的SELECT里面UPDATE
**You can't specify target table 'form' for update in FROM clause**
我希望这是明确的:我想从同一个表中的最小元素-1并指定为POS
UPDATE forms SET
pos = (SELECT MIN(pos)-1 FROM forms)
WHERE id=$id
这不起作用,错误消息:mysql的SELECT里面UPDATE
**You can't specify target table 'form' for update in FROM clause**
我希望这是明确的:我想从同一个表中的最小元素-1并指定为POS
consp是正确的,它不被支持。有一种解决方法,但是:
UPDATE forms SET
pos = (SELECT MIN(pos)-1 FROM (SELECT * FROM forms) AS x)
WHERE id=$id
一个版本可能更快:
UPDATE forms
SET pos = (SELECT pos-1 FROM (SELECT MIN(pos) AS pos FROM forms) AS x)
where id=$id
您的问题is stated plainly in the MySQL manual:
当前,您无法更新表并从子查询中的同一表中进行选择。
你会想要使用一个事务。关闭AutoCommit,开始一个事务,然后执行SELECT MIN(pos)-1 FROM forms FOR UPDATE,获取该结果,使用它进行更新,然后提交事务。
您也可以尝试:
START TRANSACTION;
SET @newMin := MIN(pos)-1 FROM forms;
UPDATE forms SET [email protected] WHERE id='$id';
COMMIT;
+1“螺丝您的任意异想天开的限制”。希望它可以工作,但我不再使用mysql了。 – 2009-12-24 00:07:03
工作!尊重标志! – Dan 2009-12-24 00:13:47
......家伙不要忘记使用isnull()以防万一表为空 – Dan 2009-12-24 00:32:42