2012-03-27 40 views
3

我正在尝试开发一个简单的跟踪系统。我想要做的是插入新记录或更新记录,如果它匹配相同的广告系列。如果用户在新广告系列上触发,我想插入一条新记录。这是我目前的查询工作正常。仅当另一列匹配时才更新记录?

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

我的目标是如果[email protected]触发campaign1,那么它会插入记录。如果他再次尝试广告系列1,它只会更新时间戳。现在,当[email protected]触发campaign2时,它会插入一个全新的记录。

所以基本上我试图只在用户触发一个新的广告系列时才将其加入INSERT。否则,我希望它更新时间戳。

任何想法或建议我真的很感激它!

+0

'只能在唯一的密钥 - 你必须在'campaign'场该附加唯一密钥工作。 – 2012-03-27 14:16:42

+0

但是mysql检查两个键或只是主? – john 2012-03-27 14:17:29

+1

它检查表中的所有唯一键:http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html – 2012-03-27 14:19:17

回答

2

除非我失去了一些东西,你需要的是一个独特的密钥放在 '电子邮件' 和你的桌子上 '运动' 列:

ALTER TABLE tracking ADD UNIQUE KEY uk_email_campaignemailcampaign);

+0

我不知道你可以这样做。我仍然在学习,所以我非常感谢它完美的帮助。 – john 2012-03-27 14:34:58

2

刚上(电子邮件,活动)添加唯一的密钥 - 在重复key`

ALTER TABLE `tracking` 
    ADD UNIQUE INDEX `UQ_email_campaign` (`email`, `campaign`); 
相关问题