MySQL更新一行但只有一个字段

时间:2013-10-01 07:08:33

标签: mysql sql cakephp

我使用多个字段更新表格。现在,如果另一个字段具有定义的值,则只能更新其中一个字段,例如:

 id   | name       | image               | update
--------------------------------------------------
    1 | john       | myimage.jpg         | 0
    2 | ben        | yourimage.gif       | 1
--------------------------------------------------

现在我遍历所有行并更新所有字段,但只有在“update”-flag设置为1时才应更新图像。 如果为0,则不应覆盖现有值。

现在我尝试了这个:

...
`image` = IF(update = 1, VALUES(`image`),`image`)
...

但它显然无法正常工作,因为它会在每种情况下覆盖图像。

5 个答案:

答案 0 :(得分:3)

update table
set image = new_value
where update = 1
and id = ?// if you want spacific row, if not ignore this line

答案 1 :(得分:2)

如果您只想更新图像列,Ofer的回答肯定是最好的。如果您想将图片更新打包到更大的查询中,IF()的工作方式如下:

IF(expression, return this if expression true, return this if expression false)

在你的情况下:

UPDATE table t1
SET
t1.image = IF(t1.update = 1, t1.image, 'new image')

答案 2 :(得分:1)

首先只需从查询表中获取更新值

 Select update from your table where id = 'provide row id'


  Then using if else condition by checking value of update fetch fire your update 
   query

 eg.
    if($update == 1)
      {
      echo "Your update query here";
       }

    else
     {
     }

答案 3 :(得分:1)

小心“更新”列的名称。这是一个保留字,就像你在下面看到的那样(用于更新行)。 我会改为:

ALTER mytable
CHANGE update update_flag tinyint

然后使用以下内容更新行:

UPDATE mytable
SET image = somevalue
WHERE update_flag = 1
AND id = someid

如果您不想更新update_flag为1的所有行,则只需要最后一行。

答案 4 :(得分:0)

update your_table
set `image` = case when update = 1 
                  then $newvalue 
                  else `image`
             end,
    other_column = 'some_value'