2010-06-13 6 views
2

Alors, voici le problème (il est probablement un facile un: P)tables Combinationally MySQL uniques

Ceci est ma structure de la table:

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 

Il est donc pour un système de prix utilisateur. Je ne veux pas que mes utilisateurs obtiennent le même prix plusieurs fois, c'est pourquoi j'ai un champ "duplicata".

La requête que je suis en train est ce (avec des données d'échantillons de 3 et 2):

INSERT INTO users_awards (user_id, award_id) 
VALUES ('3','2') ON DUPLICATE KEY UPDATE duplicate=duplicate+1 

Donc, mon MySQL est un peu rouillé, mais je mis user_id être une clé primaire et award_id à être une clé UNIQUE. Ce (genre de) a créé l'effet désiré.

Lorsque l'utilisateur 1 a reçu le prix 2, il est entré. Si il/elle a obtenu deux fois, une seule rangée serait dans la table, et le doublon serait mis à 1. Et encore, 2, etc.

Lorsque l'utilisateur 2 a reçu le prix 1, il est entré. Si il/elle l'a obtenu deux fois, dupliqué mis à jour, etc.

Mais lorsque l'utilisateur 1 reçoit le prix 1 (après que l'utilisateur 2 lui a déjà été attribué), le champ dupliqué de l'utilisateur 2 (avec le prix 1) augmente et rien n'est ajouté à l'utilisateur 1.

Désolé si c'est un peu nbishbish. Vraiment apprécier l'aide!

Jack

Répondre

3

Savez-vous qu'une contrainte unique peut être une combinaison de colonnes?

Remplacez votre unique constraint par (user_id, award_id). En fait, cela devrait être la clé primaire de la table. Votre requête devrait alors fonctionner comme prévu.

+0

Merci! Je ne savais pas qu'une contrainte unique pouvait être sur plusieurs colonnes ... Je suppose que c'est très important! : D J'ai ajouté ceci et tout fonctionne comme prévu maintenant. À votre santé! – Jack