Кто-то помог мне написать следующее:Trigger только на конкретные изменения в данных
CREATE TRIGGER update_stats AFTER UPDATE ON user_hours FOR EACH ROW
INSERT INTO hours_statistics (user_id, opportunity_id, completed_hours) VALUES
(OLD.user_id, OLD.opportunity_id, -OLD.completed_hours),
(NEW.user_id, NEW.opportunity_id, +NEW.completed_hours)
ON DUPLICATE KEY UPDATE
completed_hours = completed_hours + VALUES(completed_hours);
Однако триггер должен работать только для:
UPDATE user_hours JOIN user_calendar USING (user_calendar_id, opportunity_id)
SET user_hours.completed_hours = agreed_hours,
user_hours.hours_committed = 'completed'
WHERE user_hours.hours_committed = 'accepted'
AND user_hours.completed_hours IS NULL
AND user_calendar.date_start = CURRENT_DATE();
Как она стоит в настоящее время, если администратор или пользователь completed_hours отрегулированы вручную, триггер обновления все еще работает. Я хотел бы добавить некоторый оператор IF в код, но мои попытки не смогли создать триггер.
Я ищу что-то вроде:
CREATE TRIGGER update_stats AFTER UPDATE ON user_hours FOR EACH ROW
IF hours_committed = 'completed' THEN
INSERT INTO hours_statistics (user_id, opportunity_id, completed_hours) VALUES
(OLD.user_id, OLD.opportunity_id, -OLD.completed_hours),
(NEW.user_id, NEW.opportunity_id, +NEW.completed_hours)
ON DUPLICATE KEY UPDATE
completed_hours = completed_hours + VALUES(completed_hours);
END IF
END
Кто-нибудь может помочь, просто не хочу, чтобы триггер работает, если конкретное условие не будет выполнено, раздражает, что код работает нам нужно, но это делает проблему в течение нескольких дней за пределами выполняемого запроса настройки.
благодарит заранее.
Марк
ли вы имеете в виду 'hours_commited = «completed''? –