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

Filed under:
|
|

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

Related posts about php

Related posts about mysql