2010-01-10 8 views
2

Je suis en train de mettre en œuvre un système de notation où je garde les deux champs suivants dans ma table db:MySQL Comment insérer un nouvel enregistrement ou mettre à jour un champ selon qu'il existe?

note (la note actuelle) de num_rates (le nombre d'évaluations soumises à ce jour)

UPDATE `mytable` 
    SET rating=((rating*num_rates)+$theRating)/num_rates, num_rates=num_rates+1 
WHERE uniqueCol='$uniqueCol' 

les variables proviennent de mon code PHP.

Donc, au fond parfois la ligne avec la uniqueCol n'existe pas dans la base de données, alors comment puis-je faire la déclaration ci-dessus si le existe et si elle ne puis pas faire quelque chose comme ceci:

INSERT INTO `mytable` 
    SET rating=$theRating, num_rates=1, uniqueCol=$uniqueCol 

Répondre

4

Jetez un oeil à INSERT ... ON DUPLICATE KEY UPDATE.

Il devrait ressembler à quelque chose comme ça:

INSERT INTO mytable (rating, num_rates, uniqueCol) 
VALUES ($theRating, 1, $uniqueCol) 
ON DUPLICATE KEY UPDATE 
    rating=((rating*num_rates)+$theRating)/num_rates, 
    num_rates=num_rates+1; 

Assurez-vous d'avoir un UNIQUE index ou PRIMARY KEY sur votre uniqueCol.

Questions connexes