Php 插入if不存在else更新的最有效方法
stackoverflow.com上已经有了类似的线程,但是没有一个线程解释了如果表中不存在,插入什么是最有效的方法,如果表中不存在,更新什么是最有效的方法,我们假设我们希望一次和经常使用数千条记录 有一个存储ID、sku、仓库ID和数量的表库存 我与一些API通信以获得所有库存的列表,比如说在Amazon中,我想将其与我的系统同步,以便我始终知道在哪个仓库中有多少数量。当然,在某些情况下,对于新SKU,将其保存在数据库中的查询将是插入查询,但对于旧SKU,则是更新查询。当我们必须同步数千条记录时,执行此操作的最有效方法是什么?还有一点需要补充的是,sku、warehouseid的组合必须是唯一的,因此当我们执行更新时,我们需要首先检查该组合是否不存在,如果存在,我们必须使用插入 请记住,对于插入记录,我一次使用多个insert PDO 1000 insert,因此我可以在1-2秒内技术上执行1000次插入 我正在考虑从库存表中提取所有记录,并将它们保存在一个数组中。然后从API调用中提取所有记录并在代码中进行比较。通过这种方式,我可以指定5000条记录需要更新,10000条记录需要插入。你觉得怎么样?它会比先选择然后插入或更新更快吗?还有什么方法可以用一个查询执行多个更新,就像我插入记录一样 这是我的多重插入函数:Php 插入if不存在else更新的最有效方法,php,mysql,pdo,Php,Mysql,Pdo,stackoverflow.com上已经有了类似的线程,但是没有一个线程解释了如果表中不存在,插入什么是最有效的方法,如果表中不存在,更新什么是最有效的方法,我们假设我们希望一次和经常使用数千条记录 有一个存储ID、sku、仓库ID和数量的表库存 我与一些API通信以获得所有库存的列表,比如说在Amazon中,我想将其与我的系统同步,以便我始终知道在哪个仓库中有多少数量。当然,在某些情况下,对于新SKU,将其保存在数据库中的查询将是插入查询,但对于旧SKU,则是更新查询。当我们必须同步数千条记录
function insert_multiple($table_name, $data)
{
$db = sitedb('','PDO');
$sub_data = array_chunk($data, 1000);
for ($b = 0; $b < count($sub_data); $b++)
{
$insert_values = array();
for ($a = 0; $a < count($sub_data[$b]); $a++)
{
$insert_values = array_merge($insert_values, array_values($sub_data[$b][$a]));
$placeholder[] = '(' . implode(', ', array_fill(0, count($sub_data[$b][$a]), '?')) . ')';
}
$sql2 = "INSERT INTO $table_name (" . implode(",", array_keys($sub_data[$b][0])) . ") VALUES " . implode(',', $placeholder) . "";
$prepare = $db->prepare($sql2);
try
{
$prepare->execute($insert_values);
}
catch (PDOException $e)
{
echo "<pre>";
print_r($sub_data[$b]);
echo "</pre>";
echo $e->getMessage();
print_r($db->errorInfo());
}
unset($insert_values);
unset($placeholder);
}
}
就效率而言,您还应该在for循环之外使用foreach或callcount,因为现在您正在调用count-ouch!您可以考虑替换为有什么方法来更新更新中的一个列的旧值吗?例如,如果记录存在,我希望保持create_date值不变。
REPLACE INTO tablename SET field1 = value1, field2 = value2;