[MySQL] Datensatz eintragen, wenn nicht vorhanden

Steusi

Nasenbär
Hallo Leute,
das Thema hat zwar einen Bart aber ich habe nicht das Richtige im Forum gefunden.

Ich möchte einen Datensatz nur hinzufügen, wenn dieser noch nicht vorhanden ist. Dabei kann ich aber nicht eine Spalte als UNIQUE setzen, da erst 2 Spalten zusammen nicht noch einmal vorkommen dürfen.
Daher bringt mir INSERT ... ON DUPLICATE KEY UPDATE ja nichts oder? Obwohl ich ja auch kein Update möchte.
Da ich mit PHP arbeite, kann ich es auch einfach in 2 Schritten ausführen, doch schließlich möchte ich meinen Wissensstand ja erweitern.

Mein erster Versuch mit WHERE NOT IN
SQL:
INSERT INTO user
                      (user_firstname,
                       user_familyname)
               SELECT '{$_POST['firstname']}',
                       '{$_POST['familyname']}'
               WHERE user_firstname NOT IN
                       (SELECT
                       user_firstname
                       FROM user
                       WHERE user_familyname = '{$_POST['familyname']}')
Fehler:
1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE user_firstname NOT IN (SELECT ' at line 6

Da yaslaw mir mal sagte, das Subquerys innerhalb von WHERE-Bedingungen schnell einmal Fehler aufwerfen, mein 2. Versuch:
SQL:
IF NOT EXISTS
                    (SELECT user_firstname,
                            user_familyname
                    FROM user
                    WHERE user_familyname = '{$_POST['familyname']}'
                    AND user_firstname = '{$_POST['firstname']}')
                    INSERT INTO user
                        (user_firstname,
                         user_familyname)
                    VALUES({$_POST['firstname']}',
                          '{$_POST['familyname']}')
Fehler:
1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF NOT EXISTS (SELECT user_firstname, ' at line 1

Hat jemand einen Tipp für mich?
 
Zuletzt bearbeitet von einem Moderator:
Setz den Primary-Key über beide Felder. Das sollte gehen.
Ich denke, es sollte auch mit einem UNIQUE-KEY funktionierne

SQL:
ALTER TABLE mytable  
ADD PRIMARY KEY (feld1, feld2);
--oder
ALTER TABLE mytable  
ADD UNIQUE INDEX myIndex (feld1, feld2)

Dann kansst du mit INSERT IGNORE arbeiten
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück