2

我更新了一个包含多个字段的表。现在,只有在另一个字段具有定义的值时,才能更新其中一个字段,例如:

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

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

现在我尝试了这个:

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

但它显然不起作用,因为它在每种情况下都会覆盖图像。

4

5 回答 5

4
update table
set image = new_value
where update = 1
and id = ?// if you want spacific row, if not ignore this line
于 2013-10-01T07:11:49.513 回答
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')
于 2013-10-01T07:15:09.217 回答
1

请注意“更新”列的名称。这是一个保留字,如下所示(用于更新行)。我会将其更改为:

ALTER mytable
CHANGE update update_flag tinyint

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

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

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

于 2013-10-01T07:23:06.577 回答
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
     {
     }
于 2013-10-01T07:15:25.347 回答
0
update your_table
set `image` = case when update = 1 
                  then $newvalue 
                  else `image`
             end,
    other_column = 'some_value'
于 2013-10-01T07:09:34.587 回答