我在下面有这个功能,我用来将新记录插入MySQL或更新记录(如果它已经存在)。
它是我正在构建的项目管理项目的一部分,现在我已在字段中添加了任务排序顺序。所以基本上,如果一个项目有100个任务并且用户保存数据,那么它将进行100个SQL查询。我并不喜欢这个想法,但在这种情况下,我认为这样会很好。
有一件事让我烦恼,我有一个date_modified
数据库列是DATETIME字段。理想情况下,我只想在任务名称,描述,状态,类型或优先级更改时更新此列。
我真的不确定这样做的最佳方法吗?有什么想法吗?
这就是我现在所拥有的......
public function addOrUpdateTaskRecord($taskId, $projectId, $name, $description, $status, $priority, $type, $date_entered, $date_modified, $sort_order, $heading){
$sql = "
INSERT INTO
$this->tasksDbTableName(task_id, project_id, name, description, status, priority, type, date_entered, date_modified, sort_order, heading)
VALUES
('$taskId', '$projectId', '$name', '$description', '$status', '$priority', '$type', UTC_TIMESTAMP(), UTC_TIMESTAMP(), '$sort_order', '$heading')
ON DUPLICATE KEY UPDATE
name='$name',
description='$description',
status='$status',
priority='$priority',
type='$type',
date_modified=UTC_TIMESTAMP(),
sort_order='$sort_order',
heading='$heading'";
return $this->db->query($sql);
}
答案 0 :(得分:1)
我认为你可以在set子句中放置一个表达式,所以逻辑就在那里:
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)