我想知道插入时 dibi 的最佳实践是什么,如果存在则更新特定行。
编辑,截断我的帖子以提高可读性:
发现错误,它不是 ON DUPLICATE KEY UPDATE SET ..
而是 ON DUPLICATE KEY UPDATE ..
,现在运行,但仍然没有更新值!?
dibi::query("INSERT INTO table %v", $qdata, 'ON DUPLICATE KEY UPDATE %a', $qdata);
已解决:上层解决方案有效,只是更新集问题。
为了获得更好的性能: 当插入大量数据(例如 blob)时,这种方法不是最好的,因为查询字符串将获得双倍长度。最好使用引用更新方法,例如
插入表 (a,b,c) 值 (1,2,3),(4,5,6)
重复 key 更新 c=VALUES(a)+VALUES(b);
其中您仅引用插入语句中的值
,因为它们已经加载。
也许有人知道如何在 dibi 中执行此操作,我还没有考虑解决方案,因为我只在内部系统上保存了一些字节。
最大
最佳答案
假设您有一个像这样的数组:
array(
0 => array(
'id' => 1,
'name' => 'John',
'surname' => 'Doe'
),
1 => array(
'id' = 2,
'name' => 'Jake',
'surname' => 'First'
)
)
你想得到这个查询:
INSERT INTO table (`id`,`name`,`surname`) VALUES (1,'John','Doe'),(2,'Joe','First')
ON DUPLICATE KEY UPDATE `name`=VALUES(name), `surname`=VALUES(surname);
为此,您必须从初始数组中收集键并将它们放入一个新数组中,并用“VALUES”包装
// search for columns
$keys = array_keys($array[0]);
// wrap keys
$updateStatement = array();
foreach ($keys as $key) {
if ($key != 'id') $updateStatement[$key] = "VALUES($key)";
}
dibi::query("INSERT INTO table %ex", $data, 'ON DUPLICATE KEY UPDATE %a', $updateStatement);
关于php - 迪比 :query best practice on duplicate key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17171496/