2012-08-26 2 views
1

Кто-то помог мне написать следующее: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 

Кто-нибудь может помочь, просто не хочу, чтобы триггер работает, если конкретное условие не будет выполнено, раздражает, что код работает нам нужно, но это делает проблему в течение нескольких дней за пределами выполняемого запроса настройки.

благодарит заранее.

Марк

+0

ли вы имеете в виду 'hours_commited = «completed''? –

ответ

2

триггер всегда будет работать, вам нужно добавить, что условие в теле триггера, и сравнить недавно обновленный столбец (new.column):

DELIMITER // 

CREATE TRIGGER update_stats AFTER UPDATE ON user_hours 
FOR EACH ROW 
BEGIN 
    IF NEW.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// 
+0

Это дает сообщение об ошибке: У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '' по строке 7 END IF END; У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «END IF END» в строке 1 – MarkH

+0

Есть ли столбец с именем 'hours_completed'? Или это 'hours_commited'? –

+0

Какую таблицу следует использовать? – MarkH

Смежные вопросы