2014-01-22 41 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