Combinationally unique MySQL tables
Posted
by Jack Webb-Heller
on Stack Overflow
See other posts from Stack Overflow
or by Jack Webb-Heller
Published on 2010-06-13T09:18:48Z
Indexed on
2010/06/13
9:22 UTC
Read the original article
Hit count: 248
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.
When 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
© Stack Overflow or respective owner