Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
"INSERT ... ON DUPLICATE KEY UPDATE" verhält sich seltsam [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
"INSERT ... ON DUPLICATE KEY UPDATE" verhält sich seltsam


 
Luke
15-11-2010, 17:42 
 
Hallo,

Ich habe ein recht aufwändiges SQL-Statement um mehrere Werte in einer Tabelle wahlweise einzufügen oder wenn sie schon existieren upzudaten. Ich benutze dafür die "INSERT ... ON DUPLICATE KEY UPDATE" Syntax:

INSERT INTO builder_template_setting (`type`, `template_id`, `name`, `value`, `category_id`, `options`)

VALUES
('0', 20, 'builder_cfg_page_title', 'Seitentitel 1', '', ''),
('0', 20, 'builder_css_title_color', '#a9cc64', '', ''),
('0', 20, 'builder_css_title_font', '\'Times New Roman\', Times, serif', '', ''),
('0', 20, 'builder_css_title_size', '64.81927710843374', '', ''),
('0', 20, 'builder_css_title_vert_pos_three', '112', '', ''),
('0', 20, 'builder_css_title_hor_pos_three', '218', '', '')

ON DUPLICATE KEY UPDATE

value=VALUES(value),
type=IF(VALUES(type)='',type,VALUES(type)),
category_id=IF(VALUES(category_id)='',category_id,VALUES(category_id)),
options=IF(VALUES(options)='',options,VALUES(options))
Hier nochmal formatiert: https://gist.github.com/9f809113cc11eb56a765

In der Tabellenstruktur ist template_id und name zusammen ein unique index, so dass wenn es die beiden in der kombination schon gibt, der entsprechende Record upgedatet anstatt insertet wird:
http://img.skitch.com/20101115-tajbm6pxrb5pu86cyri9g1wcbx.preview.jpg (https://skitch.com/luke23ae/rypp3/phpmyadmin)Click for large view (https://skitch.com/luke23ae/rypp3/phpmyadmin)

Wenn ich das Statement oben zum ersten mal ausführe werden die Werte korrekt eingetragen. Wenn ich es das 2te mal einfüge, so dass er updatet anstatt zu inserten Werden die Felder durcheinandergeschmissen. Bei value (also der spalte value) stehen dann werte die zu anderen namen gehören, und das auch nicht immer, manchmal geht's, manchmal geht's nicht.

 
Luke
16-11-2010, 14:52 
 
Ok das Problem ist gelöst. Es war tatsächlich ein Bug in MySQL:

MySQL :: Re: INSERT INTO ... ON DUPLICATE KEY UPDATE (http://forums.mysql.com/read.php?132,372516,373117#msg-373117)

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 13:33 Uhr.