2009-06-12 4 views
0

Je suis en train de mettre en œuvre un système point 3 de la table de marquageconfondu par insertion sur la mise à jour clé en double

Tableau: Item
Colonnes: ItemID (primaire, auto_increment), Titre, contenu

Tableau: Tag
Colonnes: TagId (primaire, auto_increment), le titre, TagCount

Tableau: itemtag
Colonnes: itemid, TagId

Chaque titre d'une étiquette est unique.
je voudrais mettre en œuvre un moyen efficace d'insérer à la table Tag:
1. Vérifiez si le titre existe
2. Si elle existe, la mise à jour TagCount + 1
3. Sinon, si elle n'existe pas, insérer

J'ai regardé dans INSERT oN DUPLICATE KEY UPDATE, mais je suis confus si elle peut être appliquée parce que ma clé est la TagID et non le titre.

+0

Question1: ne Item.Title et des valeurs différentes Tag.Title tenir? Question2: ne devrait pas le TagCount sur la table itemtag avec une clé primaire sur (ItemID, TagID)? – gahooa

+0

Q1: valeurs différentes Q2: TagCount est le nombre de ItemTags pour ce Tag donné. Je veux le stocker juste pour l'efficacité. – Glitz

Répondre

3

Je suppose que vous essayez de faire l'insertion dans la table « Tag ».

Vous devez modifier la table et ajouter un index unique sur le champ titre:

alter table tag add unique index title(title); 

Ensuite, vous pouvez faire la

suivante
insert into tag (Title, TagCount) values ('blah',1) 
on duplicate key update TagCount = TagCount + 1; 

Espérons que le tour est joué pour vous.

0

Qu'est-ce que vous voulez sans doute faire est de rendre le champ « Titre » dans Tag unique.

Si vous faites cela, vous pouvez faire:

INSERT INTO Tag (Title, TagCount) VALUES ('<value>', 1) 

Duplicate KEY UPDATE TagCount = TagCount + 1;

Questions connexes