# Insert wenn nicht vorhanden



## Alice (25. Oktober 2015)

Hallo.

Ich habe in einer Tabelle 3 Spalten.

Tabelle: Read_Posts

1. Spalte: User_ID
2. Spalte: Post_ID
3. Spalte: Unix_TS (Timestamp)

Nun möchte ich beim eintragen (Insert) überprüfen, dass User_ID und Post_ID nicht doppelt eingetragen werden. Wenn User_ID und Post_ID bereits vorhanden sind, soll nichts eingetragen werden.


```
INSERT INTO Read_Posts (User_ID, Post_ID, Unix_TS)
SELECT User_ID, Post_ID FROM Read_Posts
WHERE NOT EXISTS(
SELECT User_ID, Post_ID FROM Read_Posts WHERE User_ID=$User_ID AND Post_ID=$Post_ID
) LIMIT 1
```

Das funktioniert nicht, weil eine Spalte "Unix_TS" in der Abfrage fehlt.

Wie kann ich das lösen?


----------



## abuzze (25. Oktober 2015)

erzeuge einen UNIQUE KEY über User_ID und  Post_ID, dann gibt es keine Dubletten(das INSERT schlägt einfach fehl)


----------



## Alice (25. Oktober 2015)

Geht auch mit User_ID und Post_ID als Primärschlüssel nicht.

So geht es...


```
INSERT INTO Read_Posts (User_ID, Post_ID, Unix_ID)
SELECT * FROM (SELECT $User_ID, $Post_ID, $Unix_ID) AS tmp
WHERE NOT EXISTS (
SELECT User_ID, Post_ID FROM Post_Reader WHERE User_ID=$User_ID AND Post_ID=$Post_ID
) LIMIT 1
```


----------

