Jeder kennt es - es soll ein Datensatz in eine Tabelle eingetragen werden.
Die Tabelle hat ein Schlüsselfeld, das eindeutig ist.
Führt man einen Insert aus und der Key ist schon vorhanden, löst das ein Fehler aus, also muss man folgendes machen:
1. Abfragen ob der Key schon vorhanden ist
2. Ist vorhanden => UPDATE, sonst INSERT
Man muss also 2 Abfragen machen.
Findige User sagen: okay, probieren wir erst UPDATE
PHP-Code:
mysql_query("UPDATE tabelle SET ...");
if(!mysql_affected_rows() {
mysql_query("INSERT INTO tabelle SET ...");
}
Die Methode hat einen Haken. MySQL überprüft bei einem UPDATE, ob es überhaupt neue Werte gibt. ist das nicht der Fall, macht es nichts, die Rückgabe der betroffenen Datensätze wäre dann 0.
Unsere Abfrage würde greifen, einen INSERT durchführen und einen Fehler auslösen.
MySQL hat einen pfiffigen Befehl, der die ganze Problematik umgeht:
Code:
INSERT INTO tabelle SET ... ON DUPLICATE KEY UPDATE timestamp=UNIX_TIMESTAMP();
Ich finde das eine sehr praktische Sache und schätze, das kaum einer diesen Syntax kennt.
weiter Infos:
http://dev.mysql.com/doc/refman/5.1/...duplicate.html