2012-03-27 14 views
3

Ich versuche ein einfaches Tracking-System zu entwickeln. Ich versuche entweder den neuen Datensatz einzufügen oder den Datensatz zu aktualisieren, wenn er mit der gleichen Kampagne übereinstimmt. Ich möchte einen neuen Datensatz einfügen, wenn der Nutzer für eine neue Kampagne ausgelöst wird. Hier ist meine aktuelle Abfrage, die gut funktioniert.Datensatz nur aktualisieren, wenn eine andere Spalte übereinstimmt?

INSERT INTO `tracking` (`email`,`ip`,`referrer`,`campaign`,`timestamp`) 
VALUES ('$campaign[0]','$ip','$referrer','$campaign[1]','$timestamp') 
ON DUPLICATE KEY UPDATE `last_timestamp` = '$timestamp' 

Mein Ziel ist es, wenn [email protected] Campaign1 auslöst, dann wird es den Datensatz INSERT. Wenn er erneut Kampagne 1 versucht, aktualisiert er nur den Zeitstempel. Wenn nun [email protected] campaign2 auslöst, wird ein völlig neuer Datensatz eingefügt.

Also im Grunde versuche ich, es nur zu INSERT zu bekommen, wenn der Benutzer eine neue Kampagne auslöst. Ansonsten möchte ich, dass der Zeitstempel aktualisiert wird.

Irgendwelche Ideen oder Ratschläge, ich würde es wirklich schätzen!

+0

'auf doppelten key' funktioniert nur auf eindeutigen Schlüsseln - Sie hierfür einen eindeutigen Schlüssel auf der' campaign' Feld hinzufügen haben würden zu Arbeit. –

+0

überprüft aber mysql beide Schlüssel oder nur die primäre? – john

+1

Es überprüft alle eindeutigen Schlüssel in der Tabelle: http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html –

Antwort

2

Es sei denn, ich etwas fehle, alles, was Sie brauchen, ist ein eindeutiger Schlüssel auf der 'E-Mail' setzen und 'Kampagne' Spalten auf dem Tisch:

ALTER TABLE tracking UNIQUE ADD KEY uk_email_campaign (email, campaign);

+0

Ich hatte keine Ahnung, dass Sie das tun könnten. Ich lerne immer noch, also schätze ich wirklich die Hilfe, die es perfekt arbeitete. – john

2

Fügen Sie einfach einen eindeutigen Schlüssel auf (E-Mail, Kampagne) -

ALTER TABLE `tracking` 
    ADD UNIQUE INDEX `UQ_email_campaign` (`email`, `campaign`); 
Verwandte Themen