Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 您能否从MySQL数据库的大规模更新中获取数据,该数据库只显示使用PHP在数据库中更改的数据?_Javascript_Php_Mysql_Sql_Ajax - Fatal编程技术网

Javascript 您能否从MySQL数据库的大规模更新中获取数据,该数据库只显示使用PHP在数据库中更改的数据?

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条记录

我正在为SugarCRM构建一个PHP/MySQL/JavaScript应用程序,它将是一个项目管理应用程序

任务可以组织到
任务列表中
,也可以通过拖放排序,然后将订单号保存到任务数据库表上的
排序顺序
数据库列中

当特定任务记录的其他字段发生更改时,确保只更新
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