我正在处理一个查询,该查询必须处理插入记录并在主键重复时更新列值。如何取消没有使用mysql中的重复键更新进行更新的列
在我的情况列名和值来作为JSON对象像下面
{
"col1": "val1",
"col2": "val2",
.....
}
我的表具有5列和在JSON对象我可以仅具有2或3列出的5
现在,我该如何取消未更新查询的列?
这是我到目前为止所尝试过的。
$columns = implode(', ', array_keys($requirement));
$values = array_values($requirement);
$placeholders = implode(', ', array_fill(0, count($values), '?'));
$updatedReq = $requirement;
unset($updatedReq['requirement_id']);
unset($updatedReq['buyer_id']);
$updated = array_keys($updatedReq);
array_walk($updated, function(&$value, $key) { $value .= '= ?'; });
$updatedPlaceholders = implode(', ', $updated);
$updatedVal = array_values($updatedReq);
$finalVal = array_merge($values, $updatedVal);
$sql = "INSERT INTO requirements ($columns) VALUES ($placeholders) ".
"ON DUPLICATE KEY UPDATE $updatedPlaceholders";
$db->query($sql);
$db->executeWithArray($finalVal);
$要求是一个关联数组键作为列名和值在表
表结构
CREATE TABLE requirement(
id integer PRIMARY KEY AUTO_INCREMENT,
col1 varchar(20) DEFAULT NULL,
col2 varchar(20) DEFAULT NULL,
col3 varchar(20) DEFAULT NULL,
col4 varchar(20) DEFAULT NULL,
col5 varchar(20) DEFAULT NULL,
created datetime DEFAULT CURRENT_TIMESTAMP,
updated datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)
注意更新的值:REPLACE INTO不是一个选项因为其中一列具有日期值,在更新值时不应该修改该日期值。
请问您能否提供表格结构? – rbr94
使用表格结构编辑 –