Php dibi:查询重复密钥的最佳实践
我想知道在插入和更新特定行时,dibi的最佳实践是什么 编辑、截断我的帖子以提高可读性: 发现一个错误,它不是重复密钥更新集上的Php dibi:查询重复密钥的最佳实践,php,mysql,Php,Mysql,我想知道在插入和更新特定行时,dibi的最佳实践是什么 编辑、截断我的帖子以提高可读性: 发现一个错误,它不是重复密钥更新集上的。而是重复密钥更新集上的。,现在运行,但仍然没有更新值 dibi::query("INSERT INTO table %v", $qdata, 'ON DUPLICATE KEY UPDATE %a', $qdata); 已解决:上层解决方案有效,只是更新集问题 为了获得更好的性能: 当插入大量数据(如blob)时,这种方法不是最好的,因为查询字符串的长度将是原来的两
。
而是重复密钥更新集上的。
,现在运行,但仍然没有更新值
dibi::query("INSERT INTO table %v", $qdata, 'ON DUPLICATE KEY UPDATE %a', $qdata);
已解决:上层解决方案有效,只是更新集问题
为了获得更好的性能:
当插入大量数据(如blob)时,这种方法不是最好的,因为查询字符串的长度将是原来的两倍。最好使用引用更新方法,如
插入表(a、b、c)中的值(1,2,3)、(4,5,6)
在重复密钥更新时,c=值(a)+值(b)代码>
其中,您仅引用insert语句中的值,因为它们已经加载。
也许有人知道如何在dibi中实现这一点,我还没有考虑解决方案,因为我只在内部系统上保存了一些字节
Max假设您有这样一个数组:
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);
为了做到这一点,您必须从初始数组中收集密钥,并将它们放入一个新数组中,用“值”包装
// 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);