主キーが重複している場合は、挿入レコードを処理して列値を更新する必要があるクエリを処理しています。私のテーブルには5列を持ち、JSONオブジェクトに、私は5mysqlの重複キー更新時に更新されない列を無効にする方法
のうち、唯一の2つまたは3つの列を有することができる{
"col1": "val1",
"col2": "val2",
.....
}
以下のように私の場合のカラム名と値で
はJSONオブジェクトとして来ています
今すぐクエリで更新されない列を無効にするにはどうすればよいですか?
これはこれまで私が試したことです。
$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
)
NOTEを更新する値です:INTOはオプションではありませんREPLACE列の1つに値を更新するときに変更しないでください。
テーブルの構造を教えてください。 – rbr94
テーブル構造 –