Приветствую всех. Помогите пожалуйста создать триггер, который будет записывать дату изменения определенного поля. Дана таблица materials с полями (id, name, status, status_date). Нужен триггер который будет записывать дату изменения поля status в поле status_date. INSERT INTO materials.status_date VALUES("Updated", NOW()); - вот такой триггер написал в phpmyadmin. Не сработало.
CREATE DEFINER=`user`@`%` TRIGGER `updatestatus` AFTER UPDATE ON `materials` FOR EACH ROW INSERT INTO materials.status_date VALUES(111111) вот так написал и изменил тип status_date на int, чтоб проверить работает триггер или нет. Выдает ошибку --- Добавлено --- Как это сделать ? Подскажите пожалуйста. Мне любой вариант подходит.
через php это делать не хотелось. думал триггером будет легче --- Добавлено --- Код (Text): CREATE TRIGGER updatestatus BEFORE UPDATE ON materials FOR EACH ROW BEGIN IF NEW.status <> OLD.status THEN SET NEW.status_data = NOW(); END IF; END; вот такой триггер написал, ругается на 5-ю строчку
Код (Text): CREATE TRIGGER updatestatus BEFORE UPDATE ON materials FOR EACH ROW BEGIN IF NEW.status <> OLD.status THEN SET NEW.status_data = NOW(); END IF; END; вот такой триггер написал, ругает Нет. DATETIME
Говорю, если сделаете TIMESTAMP, будет само обновляться. --- Добавлено --- P.S. Также можно добавить поле типа TIMESTAMP, а status_date сделать «генерируемым» (GENERATED ALWAYS, MySQL ver. 5.7+) на основе добавленного. --- Добавлено --- status_date?
Попробуйте временно изменить делимитер запросов. Пример Код (Text): delimiter // ваш триггер // delimiter ;
Код (Text): <select class="color<?= $item['status']; ?>" id="status" data-id="<?= $item['id'] ?>"> <? foreach ($status as $k => $v) { ?> <option value="<?= $k; ?>" <?= $k == $item['status'] ? " selected" : ""; ?>><?= $v; ?></option> <? } ?> </select>
код большой там. PHP , ajax , js --- Добавлено --- связанных файлов много. Вообщем решил сделать через PHP все таки. Триггер не буду делать. Спасибо всем кто пытался помочь.
Говорю, у вас опечатка в названии поля в коде триггера --- Добавлено --- Как оказалось, можно даже не менять тип. Раз не умеете пользоваться поисковиком, вот вкуривайте: https://dev.mysql.com/doc/refman/8.0/en/timestamp-initialization.html
связанных таблиц много Вы правы ! Оказывается опечатка и все из за этого. Вот я слепой. Спасибо. Все работает.
Код (Text): delimiter // CREATE TRIGGER updatestatus BEFORE UPDATE ON materials FOR EACH ROW BEGIN IF NEW.status <> OLD.status THEN SET NEW.status_date = NOW(); END IF; END; // delimiter ; в итоге рабочий триггер вот
Но все же не стоит пренебрегать более простыми штатными возможностями. А триггеры можно приберечь для чего-то более полезного. Короче какое-то кривое решение