2012-03-27 5 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] запускает кампанию1, тогда она будет ВСТАВИТЬ запись. Если он снова пробует кампанию 1, он просто обновляет метку времени. Теперь, когда [email protected] запускает кампанию2, он вставляет совершенно новую запись.

Так что в основном я пытаюсь получить его в INSERT только тогда, когда пользователь запускает новую кампанию. В противном случае я хочу, чтобы он обновил метку времени.

Любые идеи или советы Я бы очень признателен!

+0

'на дубликате key' работает только на уникальных ключах - вы бы добавить уникальный ключ на' campaign' поле для этого Работа. –

+0

, но mysql проверяет оба ключа или только первичный? – john

+1

Он проверяет все уникальные ключи в таблице: http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html –

ответ

2

Если я что-то не хватает, все, что вам нужно, это уникальный ключ поставить на 'электронной почты' и 'кампании' столбцов на вашем столе:

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

+0

Я понятия не имел, что вы можете это сделать. Я все еще участвую, поэтому я очень ценю помощь, с которой он работал. – john

2

Просто добавьте уникальный ключ на (по электронной почте, кампания) -

ALTER TABLE `tracking` 
    ADD UNIQUE INDEX `UQ_email_campaign` (`email`, `campaign`); 
Смежные вопросы