仅更新或插入已更改的列

时间:2013-11-26 13:52:10

标签: php mysql forms performance

我正在尝试使用PHP通过表单找到改变给定表中数据的最佳和最有效的方法。

该方案是表格中的项目列表,如果您右键单击 - >编辑项目,则会向MySQL发出所有数据请求并填充字段。

用户可以在任何字段中更改或保持数据不变,然后按save,将所有内容发送回PHP。

简单的方法是更新所有列,无论它们是否已更改,即:

$this->model->set('name', 'some name string from the form', $itemId);
$this->model->set('price', 'number from the form', $itemId);
...etc...

因此,我可能只更改名称,并使用与收到的数据相同的数据不必要地更新其余列。 (作为一个附带问题,MySQL是否知道这一点并忽略幕后的更新?)

执行智能更新的好方法是比较两个阵列吗?一个包含原始数据,另一个包含来自用户的数据。如果给定索引的值不匹配,那么它必须已更改,更新也是如此?

即。一个非常简单的例子:

if($submittedValues['name'] != $originalValues['name'])
{
    ...Update...
}

1 个答案:

答案 0 :(得分:0)

我猜你回答了你的问题,你可以比较两个数组,无论是在PHP代码中还是使用javascript,而不是将所有内容发送到服务器,只发送更改后的值。

但总的来说我不在乎我是否重置了所有数据,再次影响所有字段的过程可能比在数组中新旧数据之间进行比较更快,如果我要进行多次查询,我会非常小心数据库,但它只有一个更新查询


测试中可能有趣的是,当用户将字段留空时,请求将发送一个空字符串,最后更新请求将插入一个空字符串,其中NULL值将具有一个更好的意义