2014-07-24 2 views
0

Je suis en train de créer un déclencheur simple, mais je ne peux pas définir les médias valeur sur prato si la valeur provient de @total ou @sum . Je l'ai déjà testé pour les remplacer par « 1 » ou « 1 + 1 », pour voir si je n'étais même pas mise à jour correctement ou le problème était l'opération elle-même.Mettre à jour une deuxième table, en utilisant la gâchette

DELIMITER $$ 
CREATE 
    TRIGGER ratings_prato BEFORE INSERT ON ratings 
    FOR EACH ROW BEGIN 
     SET @total = @total + 1; 
     SET @sum = NEW.stars + @sum; 
     UPDATE prato p SET p.media = @sum/@total WHERE p.id = 1; 
    END; 
$$ 
DELIMITER ; 

Des idéias?

Répondre

0

J'ai terminé tromper le FOR EACH ROW sur déclencher. Je pensais, chaque fois qu'il était mis à jour, il se déroulerait à travers toutes les lignes. Mais, au lieu de cela, il exécute pour chaque ligne mis à jour, ce qui rend les choses possibles.

Ce fut le dernier résultat de mon déclencheur, d'insérer des notes, et la mise à jour sur la nourriture (qui était prato)

DELIMITER $$ 
CREATE 
    TRIGGER inserting_dishes_rating AFTER INSERT ON ratings 
    FOR EACH ROW BEGIN 
    IF(NEW.food_id is not null) THEN 
     SET @media = (SELECT SUM(stars) FROM ratings WHERE food_id = NEW.food_id)/(SELECT COUNT(*) FROM ratings WHERE food_id = NEW.food_id); 
      UPDATE foods f SET f.rate = @media WHERE f.id = NEW.food_id; 
    ELSE 
      SET @media = (SELECT SUM(stars) FROM ratings WHERE restaurant_id = NEW.restaurant_id)/(SELECT COUNT(*) FROM ratings WHERE restaurant_id = NEW.restaurant_id);   
     UPDATE restaurants r SET r.rate = @media WHERE r.id = NEW.restaurant_id; 
    END IF; 
END 
Questions connexes