开发者

Combinationally unique MySQL tables

开发者 https://www.devze.com 2023-01-03 02:22 出处:网络
So, here\'s the problem (it\'s probably an easy one :P) This is my table structure: CREATE TABLE `users_awards` (

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消