Ich habe SO Fragen gegraben und keine Adresse mein spezifisches Problem ... Ich habe die folgenden relevanten Themen gelesen: Here, vergeblich.MySQL ON DUPLICATE KEY UPDATE nur einfügen, nicht aktualisieren
Ich habe eine einfache Tabelle mit den folgenden Daten:
|-----------------------------------------------------------------------------|
| id | contractor_id | section_id | page_id | modified | timestamp |
|-----------------------------------------------------------------------------|
Hier ist die create-Anweisung:
CREATE TABLE `reusable_page_modified` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`contractor_id` int(11) DEFAULT NULL,
`section_id` int(11) DEFAULT NULL,
`page_id` int(11) DEFAULT NULL,
`modified` int(1) NOT NULL DEFAULT '1',
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13844 DEFAULT CHARSET=utf8;
Jetzt habe ich vier Zeilen in der db gerade jetzt, und sie sind (I ‚ll id und Zeitstempel weglassen, da sie automatisch generiert werden):
|---------------------------------------------------------|
| contractor_id | section_id | page_id | modified |
###########################################################
| 1016 | 309 | 10303 | 0 |
|----------------------------------------------------------
| 1017 | 309 | 10303 | 1 |
|----------------------------------------------------------
| 1073 | 309 | 10303 | 1 |
|----------------------------------------------------------
| 240 | 309 | 10303 | 1 |
|----------------------------------------------------------
ich in der ersten Zeile am konzentrieren, in denen modified
ist auf 0
eingestellt. Was ich tun möchte, ist es auf 1
, wenn contractor_id
, section_id
und page_id
alle vorhanden sind. Wenn nicht, geben Sie eine neue Zeile ein. Diese
ist, was ich habe:
INSERT INTO `reusable_page_modified`
(contractor_id, section_id, page_id, modified)
VALUES ('1016', '309', '10303', '1')
ON DUPLICATE KEY UPDATE
`section_id` = '309'
AND `page_id` = '10303'
AND `contractor_id` = '1016';
Dies schafft eine neue Zeile. Ich denke, ich verstehe das ON DUPLICATE KEY UPDATE
Statment nicht so, wie es beabsichtigt war. Ich habe die MySQL-Dokumentation Here gelesen und immer noch keine Hilfe. Was sehe ich hier nicht?
Ich wusste, dass ich es ein wenig anders dachte als beabsichtigt. Die "modifizierte = 1" macht jetzt Sinn, wenn ich sie anschaue. Auch der Zwang macht Sinn ... Hasse kurzsichtig, wenn du zu lange auf etwas starrst! Danke für deinen Beitrag! – Zak