2014-01-22 40 views
0

我有一個case語句同時更新多個列和行,但由於某種原因,即使沒有輸入值,它也會更新所有行和列。Mysql - case語句更新所有值不僅匹配ID

UPDATE price SET item = CASE id 
    WHEN 18 THEN 'cvbcvbcvb' 
END, 
description = CASE id 
    WHEN 17 THEN 'cvbcv' 
END, 
price = CASE id 
    WHEN 19 THEN '222' 
END 
WHERE id IN (17, 18, 19); 

我注意到,如果一列沒有更新該列的變化沒有價值,因此,例如,如果省略列描述則沒有在描述值的丟失

什麼想法?我使用PHP來收集數據和更新量

編輯會根據用戶輸入的遺憾應該提到,

+0

你能提供一個數據樣本,你得到的結果和你想要的結果嗎? –

+0

它改變每頁頁面的TBH和用戶輸入的內容。在這裏,我有一個4列id,項目,描述和價格表。我只想更新用戶從表單輸入的值。我使用數組和循環來構建上面的sql語句。 – jaggysnake

回答

1

案例wont't幫助你在這裏。試試這個。

UPDATE price SET 
    item = if(id = 18, 'cvbcvbcvb', item), 
    description = if(id = 17, 'cvbcv', description), 
    price = if(id = 19, '222', price) 
WHERE id IN (17, 18, 19); 

UPDATE解決意見: 顯然它必須是CASE。 試試這個,請:

UPDATE price SET 
    item = CASE id WHEN 18 THEN 'cvbcvbcvb' ELSE item END, 
    description = CASE id WHEN 17 THEN 'cvbcv' ELSE description END, 
    price = CASE id WHEN 19 THEN '222' ELSE price END 
WHERE id IN (17, 18, 19); 

使用CASE不依賴於它在SELECT時,它只是一個操作者 - 你可以用它在SELECT,或從使用在何處,HAVING,...幾乎任何地方。

我不知道那個語法錯誤,請更新您的代碼。

+0

多數民衆贊成在確定但如果我有多個更新,說說明有4個值需要更新和項目有2和價格有3,不會這變得複雜? – jaggysnake

+0

那麼你只需要將該字段本身放在該案例的「ELSE」中。 – Arne

+0

我比較喜歡IF,因爲它比較短,但是可以使用CASE。如果沒有設置其他值,您只需爲原始值添加ELSE。 – Arne