Подтвердить что ты не робот

Поле обновления MySQL с установленным значением IF NULL или другим значением

В настоящее время я использую два запроса на обновление, и мне интересно, есть ли способ сократить его до одного.

field1 OFTYPE INT
field2 OFTYPE DATETIME
field3 OFTYPE DATETIME

UPDATE `Table1` SET `field1` = `field1` + 1, `field2` = NOW() WHERE `id` = $id;
UPDATE `Table1` SET `field3` = NOW() WHERE `id` = $id AND (`field3` < '2011-00-00 00:00:00' OR `field3` IS NULL);

Я пытаюсь получить запрос, который будет делать UPDATE больше так:

UPDATE `Table1` 
SET `field1` = `field1` + 1,
    `field2` = NOW(),
    `field3` = ISNULL(NOW(), `first_seen`);
4b9b3361

Ответ 1

Я думаю, что это возможно для вас, используя инструкцию IF. Оператор IF принимает три параметра, когда вы его используете: выражение, значение, если true, значение, если false

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

UPDATE Table1 
SET 
    field1 = field1 + 1, 
    field2 = NOW(),
    field3 = IF(field3 < '2011-00-00 00:00:00' OR field3 IS NULL, NOW(), field3)
WHERE id = $id;

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

Ответ 2

В вашем случае вы можете использовать CASE *:

UPDATE Table1
SET field1 = field1 + 1,
  field2 = NOW(),
  field3 =
        CASE
        WHEN field3 < '2011-00-00 00:00:00' THEN /* Evaluates to false if NULL */
          NOW()
        WHEN field3 IS NULL THEN
          NOW()
        ELSE /* Don't change */
          field3
        END
WHERE id = 1

* Pun необязательный

Ответ 3

Если field3 необходимо обновить с другим условием от field1 и field2, я полагаю, что вы не можете сделать все в одном запросе. Вы можете сделать TRANSACTION, если запросы должны выполняться вместе или ничего.

Ответ 4

я хочу обновить поле с NULL в качестве значения в базе данных........ если поле пустое..... я написал этот код в своей основной форме...... код приведен ниже NULLIF ('$ Old_Id', ''), поэтому я хочу, чтобы то же самое было сделано в функции редактирования........ пожалуйста, кто-нибудь может предложить мне решение этой проблемы......