我有一个MySQL触发器,可以创建一个"任务事件日志"修改任务记录时记录在另一个数据库表中。
触发器创建的事件记录只能与"任务编辑"具体相同。现在我需要一些更先进的东西。
我需要为每个被修改的Task字段创建单独的事件日志记录。
如果任务标题,描述和截止日期都已更改,我需要制作3个事件记录,每个字段修改1个。 "任务截止日期已修改"
是否有办法为每个被修改的任务字段创建单独的事件表记录"使用触发器?
使用触发器的主要原因是我有一个批量更新任务页面,允许批量更新所有任务记录和所有那里的字段值。它还允许拖放更改排序顺序,当只有sot顺序更改记录时,除非更改实际任务字段,否则不会使修改日期更改。
BEGIN
IF NOT (NEW.date_modified <=> OLD.date_modified)
THEN
INSERT INTO apoll_web_projects_events (event_type, project_id, task_id, created_by_user_id, description, date_created) VALUES ('7', NEW.project_id, NEW.task_id, NEW.modified_user_id, NEW.name, UTC_TIMESTAMP());
END IF;
END
这是我的MySQL查询,批量更新任务记录,确保只在满足更改的字段条件时更新修改的日期字段。
然后触发器仅触发符合条件的记录并更新date_modified字段。
INSERT INTO
$this->tasksDbTableName(task_id, project_id, created_by_user_id, modified_user_id, name, description, status, priority, type, date_entered, date_modified, date_started, date_completed, date_due, milestone_id, assigned_user_id, sort_order, heading)
VALUES
($db->quote($taskId), '$projectId', '$created_by_user_id', '$modified_user_id', '$name', '$description', '$status', '$priority', '$type', UTC_TIMESTAMP(), UTC_TIMESTAMP(), '$date_started', '$date_completed', '$date_due', '$milestone_id', '$assigned_user_id', '$sort_order', '$heading')
ON DUPLICATE KEY UPDATE
date_modified = (CASE
WHEN name <> values(name)
OR description <> values(description)
OR status <> values(status)
OR type <> values(type)
OR priority <> values(priority)
THEN UTC_TIMESTAMP()
ELSE date_modified
END),
modified_user_id='$modified_user_id',
name='$name',
description='$description',
status='$status',
priority='$priority',
type='$type',
date_started='$date_started',
date_completed='$date_completed',
date_due='$date_due',
milestone_id='$milestone_id',
assigned_user_id='$assigned_user_id',
sort_order='$sort_order',
heading='$heading'
在上面的SQL中,当满足条件使其继续并更新任务记录时,是否有办法让它也触发某种事件来为正在更新的每个字段创建事件记录?