Вопрос:

MySQL: обновлять поле, только если условие выполнено

mysql if-statement sql-update

106133 просмотра

6 ответа

4570 Репутация автора

Можно ли выполнить запрос UPDATE в MySQL, который обновляет значение поля, только если выполняется определенное условие? Что-то вроде этого:

UPDATE test
SET
    CASE
        WHEN true
        THEN field = 1
    END
WHERE id = 123

Другими словами:

UPDATE test
SET
    something = 1,        /*field that always gets updated*/
    CASE
        WHEN true
        THEN field = 1    /*field that should only get updated when condition is met*/
    END
WHERE id = 123

Как правильно это сделать?

Автор: Caballero Источник Размещён: 15.02.2013 11:07

Ответы (6)


15 плюса

29605 Репутация автора

Попробуй это:

UPDATE test
SET
   field = 1
WHERE id = 123 and condition
Автор: Hamlet Hakobyan Размещён: 15.02.2013 11:10

109 плюса

180406 Репутация автора

Решение

Да!

Вот вам еще один пример:

UPDATE prices
SET final_price= CASE
   WHEN currency=1 THEN 0.81*final_price
   ELSE final_price
END

Это работает, потому что MySQL не обновляет строку, если нет изменений, как упомянуто в документации :

Если вы установите для столбца значение, которое он имеет в данный момент, MySQL заметит это и не обновит его.

Автор: fedorqui Размещён: 15.02.2013 11:10

17 плюса

684 Репутация автора

Другое решение, которое, на мой взгляд, легче читать, было бы:

UPDATE test SET something = 1, field = IF(condition is true, 1, field) WHERE id = 123

Для этого нужно установить 'field' в 1 (как OP, используемый в качестве примера), если условие выполнено, и использовать текущее значение 'field', если оно не выполнено. Использование предыдущего значения - это то же самое, что не изменять, так что все готово.

Автор: Dominique Размещён: 29.01.2016 10:45

1 плюс

762 Репутация автора

Еще один вариант:

UPDATE test
SET field = IF ( {condition}, {new value}, field )
WHERE id = 123

Это позволит обновить fieldс {new value}только если {condition}выполнено

Автор: phoenix Размещён: 18.04.2017 08:42

2 плюса

76 Репутация автора

Другое решение, мы можем использовать IF()условную функцию MySQL :

UPDATE test
SET  field  = IF(something == 1{CONDITION}, 1 {NEW VALUE}, field)
WHERE `id` = 5
Автор: krishna Размещён: 28.06.2018 09:14

0 плюса

1 Репутация автора

нашел решение с условием И: $trainstrength = "UPDATE user_character SET strength_trains = strength_trains + 1, trained_strength = trained_strength +1, character_gold = character_gold - $gold_to_next_strength WHERE ID = $currentUser AND character_gold > $gold_to_next_strength";

Автор: Oldhuntersblood Размещён: 11.08.2019 08:36
Вопросы из категории :
32x32