So, here's the problem (it's probably an easy one :P)
This is my table structure:
CREATE TABLE `users_awards` (
`user_id` int(11) NOT NULL,
`award_id` int(11) NOT NULL,
`duplicate` int(11) NOT NULL DEFAULT '0',
UNIQUE KEY `award_id` (`award_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
So it's for a user awards system. I don't want my users to be granted the same award multiple times, which is why I have a 'duplicate' field.
The query I'm trying is this (with sample data of 3 and 2) :
INSERT INTO users_awards (user_id, award_id)
VALUES ('3','2') ON DUPLICATE KEY UPDATE duplicate=duplicate+1
So my MySQL is a little rusty, but I set user_id
to be a primary key, and award_id
to be a UNIQUE key. This (kind of) created the desired effect.
When user 1 was given award 2, it entered. If he/she got this twice, only one row would be in the table, and duplicate would be set to 1. And again, 2, etc.
Wh开发者_如何学运维en user 2 was given award 1, it entered. If he/she got this twice, duplicate updated, etc. etc.
But when user 1 is given award 1 (after user 2 has already been awarded it), user 2 (with award 1)'s duplicate field increases and nothing is added to user 1.
Sorry if that's a little n00bish. Really appreciate the help!
Jack
Are you aware that a unique constraint can be on a combination of columns?
Change your unique constraint to be on (user_id, award_id)
. In fact this should be the primary key for the table. Then your query should work as you intended.
精彩评论