2010-11-11 6 views
6

Je l'ai fait avec succès avec une instruction UPDATE avant mais pas un remplacement. J'enregistre les éléments favoris dans une table mysql lorsqu'un utilisateur a emprunté.Incrémenter la valeur du champ sur REPLACE

Tableau Favs est:

USER (int) 
ITEM (int) 
COUNT (int default 0) 

SQL Je suis en train est:

REPLACE INTO favs (user,item,count) VALUES ('1','3', count + 1) 

bien qu'il ne semble pas jeter toute erreur qu'il ne soit à augmenter la valeur.

Est-ce possible? Je vous remercie.

Répondre

15

On dirait que cela ne fonctionne pas comme ça sur le remplacement. De l'manual:

Vous ne pouvez pas se référer aux valeurs de la ligne actuelle et les utiliser dans la nouvelle ligne. Si vous utilisez une mission telle que SET nom_colonne = nom_colonne + 1, la référence au nom de la colonne sur le côté droit est traité comme DEFAULT (column), de sorte que l'affectation est équivalent à SET nom_colonne = DEFAULT (column) + 1.

Edit:

Cependant, INSERT ... ON UPDATE DUPLICATE peut faire ce que vous essayez d'accomplir:

INSERT INTO favs (user, item) VALUES (2, 3) 
    ON DUPLICATE KEY UPDATE count = count + 1; 
+0

OK pas w Je vais faire une déclaration de mise à jour séparée immédiatement après. Je vous remercie. – Titan

+0

S'il vous plaît voir mon edit - c'est ce que vous essayez de faire? Si c'est le cas, il serait plus sûr et plus efficace que des instructions séparées de remplacement et de mise à jour. – Thilo

+1

yer qui fonctionne très bien, sauf que vous devez supprimer 'SET' de la déclaration pour que cela fonctionne. – Titan

Questions connexes