Ich arbeite an einer Abfrage, die mit Einfügungsdatensätzen beschäftigen und die Spaltenwerte aktualisieren muss, wenn Primärschlüssel dupliziert ist.Wie man Spalten annulliert, die nicht mit doppeltem Schlüsselupdate in mysql aktualisiert werden
In meinem Fall Spaltennamen und Werte wie als JSON-Objekt kommen unter
{
"col1": "val1",
"col2": "val2",
.....
}
Meine Tabelle enthält 5 Spalten und im JSON-Objekt kann ich nur 2 oder 3 Spalten von 5.
habenNow Wie annulliere ich die Spalten, die nicht mit der Abfrage aktualisiert werden?
Das habe ich bisher ausprobiert.
$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);
$ Voraussetzung ist ein assoziatives Array mit Schlüssel als Spaltennamen und Werte sind die Werte in der Tabelle
Tabellenstruktur
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
)
HINWEIS aktualisiert werden: REPLACE INTO ist keine Option weil eine der Spalten einen Datumswert hat, der nicht geändert werden sollte, während der Wert aktualisiert wird.
Können Sie bitte die Tabellenstruktur angeben? – rbr94
Bearbeitet mit der Tabellenstruktur –