Php dibi:查询重复密钥的最佳实践

Php dibi:查询重复密钥的最佳实践,php,mysql,Php,Mysql,我想知道在插入和更新特定行时,dibi的最佳实践是什么 编辑、截断我的帖子以提高可读性: 发现一个错误,它不是重复密钥更新集上的。而是重复密钥更新集上的。,现在运行,但仍然没有更新值 dibi::query("INSERT INTO table %v", $qdata, 'ON DUPLICATE KEY UPDATE %a', $qdata); 已解决:上层解决方案有效,只是更新集问题 为了获得更好的性能: 当插入大量数据(如blob)时,这种方法不是最好的,因为查询字符串的长度将是原来的两

我想知道在插入和更新特定行时,dibi的最佳实践是什么

编辑、截断我的帖子以提高可读性: 发现一个错误,它不是重复密钥更新集上的
而是重复密钥更新集上的
,现在运行,但仍然没有更新值

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);