2013-10-01 3 views
1

Я обновляю таблицу с несколькими полями. Теперь одна из полей может быть обновлена ​​только если другое поле имеет определенное значение, например:MySQL обновляет строку, но одно поле

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

Теперь я пройти через все строки и обновить все поля, но изображение должно быть только обновление, если «обновление» -flag установлен на 1. Если его 0, существующее значение не должно быть перезаписано.

Теперь я попытался это:

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

но его явно не работает, потому что он переписывает изображение в каждом конкретном случае.

ответ

2

Если вы хотите, чтобы обновить столбец изображения ответ Офер является, несомненно, является лучшим. Если вы хотите, чтобы упаковать обновление изображения в больший запрос, то 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') 
0
update your_table 
set `image` = case when update = 1 
        then $newvalue 
        else `image` 
      end, 
    other_column = 'some_value' 
3
update table 
set image = new_value 
where update = 1 
and id = ?// if you want spacific row, if not ignore this line 
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 
    { 
    } 
1

Будьте осторожны с названием обновленного столбца. Это зарезервированное слово, как вы можете видеть ниже (для обновления строк). Я хотел бы изменить его:

ALTER mytable 
CHANGE update update_flag tinyint 

, а затем использовать следующие обновления ваших строк:

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

Вам нужно только последнюю строку, если вы не хотите, чтобы обновить все строки, где update_flag является 1.

Смежные вопросы