實施例相結合:如何既更新
UPDATE images set show = 0 where show =1;
UPDATE images set show = 1 where id = $id;
「顯示」是布爾數字0或1,因爲只有1圖像可以在所有時間顯示。 我想用於事件,當我使用上面的代碼時,將顯示錯誤: 「MySQL說:#1064 - 您的SQL語法有錯誤;檢查與您的MySQL服務器版本對應的手冊,使用」 那麼,如何上述編碼
實施例相結合:如何既更新
UPDATE images set show = 0 where show =1;
UPDATE images set show = 1 where id = $id;
「顯示」是布爾數字0或1,因爲只有1圖像可以在所有時間顯示。 我想用於事件,當我使用上面的代碼時,將顯示錯誤: 「MySQL說:#1064 - 您的SQL語法有錯誤;檢查與您的MySQL服務器版本對應的手冊,使用」 那麼,如何上述編碼
在MySQL show
是reserved word,因此,你需要把反引號圍繞它,如果你想使用它作爲一個字段名。
UPDATE images set `show` = 0 where show =1;
UPDATE images set `show` = 1 where id = $id;
我不會將它們組合成一個單一的更新語句,它不會是有效的,因爲一個單一的更新不是真的就可以使用索引,而這2個更新會。
然而,你可以將它們組合起來,如果你真的想:
UPDATE images SET `show`=if(`show`=1,0,1)
WHERE `show`=1 OR ID=$id;
結合試試這個:
UPDATE images SET show = (CASE
WHEN show = 1 THEN 0
WHEN id = $id THEN 1
END) WHERE (show =1 OR id = $id);
請嘗試以下代碼。
UPDATE images SET `show` = CASE
WHEN `show` = 1 THEN 0
WHEN id =$id THEN 1
END;
希望這會有所幫助。
因爲這是一個例子,'show'是一個保留字,我知道,但我真正的詞是不同的。並且,謝謝你,這是工作 – Ricky
但我認爲有一個問題,因爲當$ id是一樣的,那麼將成爲所有的0.例如:id = 1,show = 0; id = 2,show = 1,id = 3,show = 0;當我使用更新圖像SET'show' = if('show' = 1,0,1) WHERE'show' = 1 OR ID = 2;然後成爲所有的節目都是0.只有一個節目是1 – Ricky
好吧,最後得到你的問題。如果將該標誌設置爲現有記錄,則單個更新將永遠不起作用,因爲單個更新語句從不觸及相同的記錄兩次。如果標記的記錄沒有更改,則不應首先發布更新聲明。 – Shadow