мне нужно обновить created_on
DATETIME значение поля для NOW()
только если старое значение is_active
поля было 0, и это изменило 1.Условный на дубликат ключа обновления не работает правильно
+-----------+---------+-----------+---------------------+---------------------+
| device_id | user_id | is_active | created_on | last_modified_on |
+-----------+---------+-----------+---------------------+---------------------+
| 5 | 5 | 0 | 2016-06-05 03:31:48 | 2016-06-05 03:31:48 |
Вот что я имею получил до сих пор:
INSERT INTO `device2users`
(`device_id`, `user_id`, `is_active`, `created_on`, `last_modified_on`)
VALUES
(5, 5, 1, NOW(), NOW())
ON DUPLICATE KEY UPDATE
`created_on` = CASE WHEN `is_active` <> 0 THEN VALUES(`created_on`) ELSE NOW() END,
`is_active`=1, `last_modified_on`=NOW();
Но это не работает, и ценность created_on
Филда всегда устанавливается в NOW()
.
EDIT 1:
Я хочу, чтобы обновить значение для created_on
поля в NOW() ON DUPLICATE KEY
, только если значение is_active
месторождения было 0
до и в указанном запросе 1
.
EDIT 2:
Я использую следующий запрос, основанный на @ring ответ предъявителя. Но я получаю:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '== '0' && NEW.is_active == '1' THEN
Вот точный запрос, который я использую.
DELIMITER //
CREATE TRIGGER created_on_after_update
AFTER UPDATE
ON `acd_device2users` FOR EACH ROW
BEGIN
IF OLD.is_active == '0' && NEW.is_active == '1' THEN
SET `created_on`=NOW();
END IF;
END; //
DELIMITER ;
Что именно вы хотите достичь? Предоставленные вами данные не отвечают этому условию. – sagi
Значение 'created_on' будет установлено в' NOW() 'в соответствии с кодом, который вы написали. Значение 'is_active' равно 0, когда выполняется ваш оператор. В заявлении вашего дела вы говорите, что 'created_on' должен быть обновлен до' NOw() ', когда' is_active' равен 0. – Incognito