слудующий запрос:
INSERT ....
SET
'id' = 1,
'end_time' = DATE_ADD( NOW(), INTERVAL 1 DAY)
ON DUPLICATE KEY UPDATE
'end_time' = DATE_ADD( 'end_time', INTERVAL 1 DAY);
То есть в таблицу вставляю значение id и соответствующую ей метку времени, сейчас + 1 день. Если подобная метка есть, то она увеличивается на 1 день.
Но нужно соблюсти условие, если сохраненная метка времени < NOW(), то в
ON DUPLICATE KEY UPDATE
вставить
'end_time' = DATE_ADD( NOW(), INTERVAL 1 DAY),
а не
'end_time' = DATE_ADD( 'end_time', INTERVAL 1 DAY);
Возможно ли в принципе это реализовать элегантно одним SQL запросом? Или всётаки городить несколько запросов с предварительным SELECT, блокировкой и транзакциями?
вроде должно работать, но ругается на синтаксис: ..... ON DUPLICATE KEY UPDATE `END_TIME` = IF `END_TIME` <= NOW() THEN DATE_ADD( NOW(), INTERVAL 1 MONTH) ELSE DATE_ADD( `END_TIME`, INTERVAL 1 MONTH) END IF; Что я делаю не так?
Обсуждают сегодня