Mysql - Если заявление, сделать обновление - PullRequest
2 голосов
/ 17 ноября 2010

Я пытаюсь создать один запрос, который может прибавлять / вычитать секунды из отметки даты и времени.

Вот то, что у меня есть в настоящее время

    UPDATE `table` 
    SET end_dt = DATE_ADD(end_dt, INTERVAL (15 - TIMESTAMPDIFF(SECOND, NOW(), end_dt)) SECOND)
    WHERE DATE_SUB(end_dt, INTERVAL 15 second) <= NOW()

По сути, это для сброса даты и времени на 15 секунд (если оно меньше 15 секунд) от текущего времени.Я хотел бы добавить условие IF, к которому, если осталось более 15 секунд, основываясь на 'end_dt', он добавит только одну секунду.

Ответы [ 3 ]

1 голос
/ 17 ноября 2010

Сделайте это, используя функцию IF в MySQL.

UPDATE `table` SET end_dt = 
IF(end_dt > DATE_ADD(NOW(),INTERVAL 15 second),
DATE_ADD(NOW(), INTERVAL 1 SECOND),
DATE_ADD(NOW(), INTERVAL 15 SECOND))
WHERE end_dt >= NOW()

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

Вы хотите обновить ВСЕ строки?

0 голосов
/ 17 ноября 2010

Я не уверен, что понимаю вопрос, но вот пример:

UPDATE `table` 
   SET end_dt = IF(end_dt = 15,
                   DATE_ADD(end_dt, INTERVAL (15 - TIMESTAMPDIFF(SECOND, NOW(), end_dt)) SECOND),
                   end_dt)
    WHERE DATE_SUB(end_dt, INTERVAL 15 second) <= NOW()

Это говорит: «Если end_dt равен 15, добавьте материал, иначе оставьте его тем же».Я уверен, что "end_dt = 15" не то сравнение, которое вы хотите сделать, но это, вероятно, должно показать вам, что вам нужно сделать.

0 голосов
/ 17 ноября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...