Ich brauche Arbeit meinen created_on
Datetime-Feld Wert NOW()
nur dann, wenn der alte Wert für is_active
Feld 0 war zu aktualisieren und zu ändern 1.Bedingt durch doppelte Schlüssel Update nicht korrekt
+-----------+---------+-----------+---------------------+---------------------+
| 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 |
was hier ich habe so weit gekommen:
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();
Aber es funktioniert nicht, und der Wert des created_on
Feld ist immer auf NOW()
.
EDIT 1:
Ich möchte den Wert für created_on
Feld zu aktualisieren, um NOW() ON DUPLICATE KEY
, nur dann, wenn der Wert war die is_active
Feld 0
vor und ist 1
in der angegebenen Abfrage.
EDIT 2:
Ich verwende die folgende Abfrage basierend auf den Inhaber lautende Antwort @ring. Aber ich bekomme:
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
Hier ist die genaue Abfrage ich verwende.
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 ;
Was genau möchten Sie erreichen? Die von Ihnen angegebenen Daten beantworten diese Bedingung nicht. – sagi
Der Wert von 'created_on' wird gemäß dem von Ihnen geschriebenen Code auf' NOW() 'gesetzt. Der Wert von 'is_active' ist 0, wenn Ihre Anweisung ausgeführt wird. In Ihrer Case-Anweisung sagen Sie, dass 'created_on' auf' NOw() 'aktualisiert werden sollte, wenn' is_active' auf 0 steht. – Incognito