2017-03-01 71 views
0

實施例相結合:如何既更新

UPDATE images set show = 0 where show =1; 
UPDATE images set show = 1 where id = $id; 

「顯示」是布爾數字0或1,因爲只有1圖像可以在所有時間顯示。 我想用於事件,當我使用上面的代碼時,將顯示錯誤: 「MySQL說:#1064 - 您的SQL語法有錯誤;檢查與您的MySQL服務器版本對應的手冊,使用」 那麼,如何上述編碼

回答

2

在MySQL showreserved 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; 
+0

因爲這是一個例子,'show'是一個保留字,我知道,但我真正的詞是不同的。並且,謝謝你,這是工作 – Ricky

+0

但我認爲有一個問題,因爲當$ 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

+0

好吧,最後得到你的問題。如果將該標誌設置爲現有記錄,則單個更新將永遠不起作用,因爲單個更新語句從不觸及相同的記錄兩次。如果標記的記錄沒有更改,則不應首先發布更新聲明。 – Shadow

0

結合試試這個:

UPDATE images SET show = (CASE 
    WHEN show = 1 THEN 0 
    WHEN id = $id THEN 1 
    END) WHERE (show =1 OR id = $id); 
0

請嘗試以下代碼。

UPDATE images SET `show` = CASE 
    WHEN `show` = 1 THEN 0 
    WHEN id =$id THEN 1 
    END; 

希望這會有所幫助。