Javascript 您能否从MySQL数据库的大规模更新中获取数据,该数据库只显示使用PHP在数据库中更改的数据?
我正在为SugarCRM构建一个PHP/MySQL/JavaScript应用程序,它将是一个项目管理应用程序 任务可以组织到Javascript 您能否从MySQL数据库的大规模更新中获取数据,该数据库只显示使用PHP在数据库中更改的数据?,javascript,php,mysql,sql,ajax,Javascript,Php,Mysql,Sql,Ajax,我正在为SugarCRM构建一个PHP/MySQL/JavaScript应用程序,它将是一个项目管理应用程序 任务可以组织到任务列表中,也可以通过拖放排序,然后将订单号保存到任务数据库表上的排序顺序数据库列中 当特定任务记录的其他字段发生更改时,确保只更新date\u modified数据库列,而不只是更新记录上的排序顺序列,这会变得更复杂一些 例如,如果从记录15开始拖动并重新排列20条记录的排序顺序。然后,只有记录1-15将更改排序顺序DB列。 在这15条更新记录上,您可能只更新其中2条记录
任务列表中
,也可以通过拖放排序,然后将订单号保存到任务数据库表上的排序顺序
数据库列中
当特定任务记录的其他字段发生更改时,确保只更新date\u modified
数据库列,而不只是更新记录上的排序顺序列,这会变得更复杂一些
例如,如果从记录15开始拖动并重新排列20条记录的排序顺序。然后,只有记录1-15将更改排序顺序
DB列。
在这15条更新记录上,您可能只更新其中2条记录的状态或标题。在这种情况下,它应该只更新这2条记录上的date_modified列,而不是15条记录
如果不存在具有匹配ID的DB记录,下面的SQL将创建一个新的DB记录。如果存在,则只更新已更改且与先前保存的数据值不同的字段
private function _addOrUpdateTaskRecord(
$taskId,
$projectId,
$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){
$sql = "
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'";
$insertOrUpdateTasks = $this->db->query($sql);
return $insertOrUpdateTasks;
}
private函数\u addOrUpdateTaskRecord(
$taskId,
$d,
$created_by_user_id,
$modified_user_id,
$name,
$description,
$status,
美元优先,
$type,
$date_输入,
$date_已修改,
$date_开始,
$date_完成日期,
$date_到期日,
$milestone_id,
$assigned\u user\u id,
$sort_顺序,
$heading){
$sql=”
插入
$this->tasksDbTableName(任务id、项目id、由用户id创建、修改用户id、名称、描述、状态、优先级、类型、输入日期、修改日期、开始日期、完成日期、到期日期、里程碑id、分配用户id、排序顺序、标题)
价值观
($db->quote($taskId)、“$projectId”、“$created_by_user_id”、“$modified_user_id”、“$name”、“$description”、“$status”、“$priority”、“$type”、UTC_TIMESTAMP()、UTC_TIMESTAMP()、“$date_start”、“$date_completed”、“$date due”、“$里程碑_id”、“$assigned_user_id”、“$assigned"分配的"排序"、$heading”)
关于重复密钥更新
修改日期=(案例)
当使用名称值(名称)时
或描述值(描述)
或状态值(状态)
或类型值(类型)
或优先级值(优先级)
然后UTC_时间戳()
其他日期(已修改)
(完),,
modified_user_id=“$modified_user_id”,
name=“$name”,
description=“$description”,
状态=“$status”,
优先级=“$priority”,
类型=“$type”,
date_started=“$date_started”,
完成日期=“$date\u completed”,
到期日期=“$date\u due”,
里程碑号=“$milestone号”,
assigned_user_id=“$assigned_user_id”,
排序顺序=“$sort\u order”,
标题=“$heading”;
$insertOrUpdateTasks=$this->db->query($sql);
返回$insertOrUpdateTasks;
}
问题 在大多数情况下,这非常有效。我允许用户使用AJAX在批量编辑屏幕上更新任务记录 问题是,
date\u start
和date\u completed
DB列最初存储在页面DOM中,作为一个以这种格式归档的隐藏表单,因为它们尚未在DB中设置0000-00-00:00:00
在修改的记录上进行第一次AJAX保存后,这些日期值将在数据库中更新。在DOM中,尽管他们仍将拥有此0000-00-00:00:00
因此,您可以在其他一些记录上进行第2次更新,而无需从上次AJAX保存中重新加载页面,然后使用0000-00-00:00:00
将新日期写入数据库
我需要用在DB中创建的新dateTIme值以某种方式更新DOM隐藏表单字段
问题是,因为我的查询没有真正显示哪些记录更新了,所以我无法获取每个记录中保存的值,以便能够更新DOM=(
创意#1 当DOM中任务行表单中的字段发生更改时,立即在DOM中更新这些日期值 问题是,如果您等待20分钟点击save按钮,则该日期与DB值相差很远 另外,如果您进行了更改,然后离开页面,甚至没有进行保存,那么您就把记录搞砸了
创意#2 我的完美解决方案将能够以某种方式返回我希望在记录(我定义的列)上返回的值,用于实际更新为JSON响应的每个记录,然后使用JavaScript迭代任何更新的记录并更新隐藏的表单datetime字段 根据我上面的查询,我认为这是不可能的,我的应用程序可能需要对这一部分进行完整的重新结构 有什么想法吗?
创意#3
如果我甚至可以得到一个包含更新了值的所有记录的数组,我甚至可以进行另一个查询来获取所有记录上的DateTime值,并为DOM中每个匹配的任务记录更新DOM
Idea#4 只需让我的AJAX保存每一个小小的更改,比如每
n秒
,甚至没有保存按钮,或者只是让它保持自动保存,这样一次只保存1条记录,而不是一次保存100条记录。这种方法允许更新DOM datetime值,并使其在DB保存的几秒钟内,但需要大量的重新编写应用程序上的te
UDPATE 一个新想法是使用JavaScript数组,将每个任务记录ID添加到任务数据的
onCHange()
事件中
所以w