Hallo!
Ich habe in einer MySQL-Tabelle Datensätze mit userid, articleid, content und noch ein paar anderen Attributen.
Es soll nun immer dann ein neuer Datensatz angelegt werden, wenn es in der gesamten Datenbank die Kombination aus userid und articleid nicht schon gibt.
Wenn also eine Zeile aus userid:501, articleid:874 existiert und ein neues Query mit den selben ids hereinkommt, so soll der bereits existierende Satz geupdatet werden - gibt es die Kombination nicht, so soll ein insert getätigt werden.
Wichtig: es geht nur um die Kombination von beidem. identische uderids und articleids dürfen so oft vorkommen wie sie wollen, aber in Kombination eben nur ein mal.
Wie könnte ich das regeln? Ich habe schon von INSERT ON DUPLICATE KEY UPDATE gehört, weiß aber nicht genau, wie ich vorgehen soll. Normalerweise setzt man das gewünschte Attribut wohl auf UNIQUE wenn man den genannten Befehl einsetzt, aber bei mir geht es ja um die Kombination 2er Attribute.
Danke vielmals!
Habe im MySQL-Forum einen tollen Beitrag gefunden - wen es interessiert, für die Forensuche und Co.:
Ich habe in einer MySQL-Tabelle Datensätze mit userid, articleid, content und noch ein paar anderen Attributen.
Es soll nun immer dann ein neuer Datensatz angelegt werden, wenn es in der gesamten Datenbank die Kombination aus userid und articleid nicht schon gibt.
Wenn also eine Zeile aus userid:501, articleid:874 existiert und ein neues Query mit den selben ids hereinkommt, so soll der bereits existierende Satz geupdatet werden - gibt es die Kombination nicht, so soll ein insert getätigt werden.
Wichtig: es geht nur um die Kombination von beidem. identische uderids und articleids dürfen so oft vorkommen wie sie wollen, aber in Kombination eben nur ein mal.
Wie könnte ich das regeln? Ich habe schon von INSERT ON DUPLICATE KEY UPDATE gehört, weiß aber nicht genau, wie ich vorgehen soll. Normalerweise setzt man das gewünschte Attribut wohl auf UNIQUE wenn man den genannten Befehl einsetzt, aber bei mir geht es ja um die Kombination 2er Attribute.
Danke vielmals!
Ergänzung ()
Habe im MySQL-Forum einen tollen Beitrag gefunden - wen es interessiert, für die Forensuche und Co.:
Please note: "INSERT... ON DUPLICATE KEY UPDATE..." can also use a compound (unique) key to check for duplication. This is very userful. For example:
If you have a log table to log hits to different websites daily, with "site_id"-s and "time" fields, where neither of them are primary keys, but togethether they are unique, then you can create a key on them, and then use "...ON DUPLICATE KEY..."
Table logs:
id: INT(11) auto_increment primary key
site_id: INT(11)
time: DATE
hits: INT(11)
Then:
CREATE UNIQUE INDEX comp ON logs (`site_id`, `time`);
And then you can:
INSERT INTO logs (`site_id`, `time`,`hits`) VALUES (1,"2004-08-09", 15) ON DUPLICATE KEY UPDATE hits=hits+15;
Excellent feature, and it is much faster and briefer then using first a select, then issuing either an update or an insert depending on the value of the select. You also get rid of the probably necessary table-lock during this action.