2009-06-11 11 views
1

Ich bekomme ein Array von Strings von einem JSON-Objekt. Ich möchte diese Zeichenfolgen in einer DB speichern, aber nur, wenn sie nicht schon da sind. Was ist der beste Weg, um zu vergleichen, was bereits in der Datenbank ist, mit dem, was ich vorhabe und Übereinstimmungen ausschließen?Wie kann ich eine MySQL-Tabelle nur hinzufügen, wenn der Datensatz noch nicht existiert?

Ich benutze PHP und MySQL.

+0

[ 'INSERT ... ON DUPLICATE KEY UPDATE'] (http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html) Siehe auch: [ "INSERT IGNORE" vs "INSERT ... ON DUPLICATE KEY UPDATE"] (http://stackoverflow.com/questions/548541/insert-ignore-vs-insert-on-duplicate-key-update) – troelskn

Antwort

5

Da das, was Sie beschreiben, fehlt den Rekord in Ruhe lassen, wenn die Strings bereits vorhanden sind, was Sie wahrscheinlich wollen, ist der IGNORE Modifikator INSERT (das heißt Sie tun INSERT IGNORE ...). Dadurch wird Ihre Abfrage nichts tun, wenn ein doppelter Schlüssel gefunden wird. Dies erfordert natürlich, dass die Zeichenfolgenfelder, in die Sie einfügen, eindeutige Schlüssel enthalten.

3

REPLACE kann tun, was Sie wollen - es fügt ein, aber wenn der Primärschlüssel bereits existiert, wird diese Zeile zuerst gelöscht. Sofern Sie keine anderen Spalten in der Tabelle beibehalten müssen, sollte es funktionieren.

http://dev.mysql.com/doc/refman/5.0/en/replace.html

2

In MySql können Sie eine Insert-Anweisung mit der Option "Ignorieren" verwenden, die keine Zeile einfügen, wenn ihre eindeutigen Felder denen einer vorhandenen Zeile entsprechen. Die Tabelle muss eine Eindeutigkeitseinschränkung mit den relevanten Feldern enthalten.

0

Sehr einfaches Beispiel:

Ihre Tabelle: Benutzer Ihre Felder: users_id, user_name, zip_code, erstellt Eindeutiger Index: user_name

INSERT INTO Benutzer (user_name, zip_code, erstellt) VALUES ('joe', 75034, '2009-06-11') ON DUPLICATE KEY AKTUALISIERUNG users_id = LAST_INSERT_ID (ID)

Der Benutzername hat einen eindeutigen Index; also, Sie können es nicht mehr als einmal hinzufügen. Wenn Sie das obige SQL verwenden, fügt es beim ersten Mal gut hinzu. Das zweite Mal wird es den Einsatz nicht wirklich tun. Die Art und Weise, wie der Duplicate-Schlüssel eingerichtet wird, können Sie jetzt die letzte Einfüge-ID von MySQL mit PHP abrufen und wissen, was die Benutzer-ID war, ob es eine echte Einfügung oder ein Duplikat war.

Verwandte Themen