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