実行中の UPDATE クエリに基づいて、時間を統計テーブルに更新する MySQL トリガーがあります。
トリガーは次のとおりです。
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//
作業クエリ:
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();
同じテーブルを更新する上記と同様の別のクエリがありますが、checked completed_hours が null ではないという少しの違いがあります。クエリは次のとおりです。
UPDATE user_hours JOIN user_calendar USING (user_calendar_id, opportunity_id)
SET user_hours.hours_committed = 'completed'
WHERE user_hours.hours_committed = 'accepted'
AND user_hours.completed_hours IS NOT NULL
AND user_calendar.date_start = '2012-08-23'
上記は更新トリガーをトリガーしますが、統計テーブルでは、この最後の更新クエリの completed_hours が 0 として表示されます。
私を助けることができるトリガーのより良い知識を持っている人はいますか?
ありがとう、
マーク