誰かが私が次のように書くのを手伝ってくれました:
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
助けてくれる人なら誰でも、特定の条件が満たされない限りトリガーを実行したくないだけで、必要なコードが機能することに悩まされますが、これにより、調整クエリが実行されていない日は問題が発生します。
前もって感謝します。
マーク