2

私は2つのテーブルを持っています、RatingsそしてRecipes

挿入後Ratings、評価されたレシピのすべての評価の平均を見つけてRating_Avg、表の列を更新する必要がありRecipesます。

これは機能しますがRecipes.Rating_Avg、Recipe_No=最後に評価されたRecipe_Noである行を更新する必要があるときにすべての行を更新していると思います。

CREATE TRIGGER `update_avg` AFTER INSERT ON `Ratings`
 FOR EACH ROW UPDATE Recipes
SET Rating_Avg = (SELECT AVG(Rating) from Ratings where Ratings.Recipe_No=Recipes.Recipe_No)

追加する必要があるように感じますが、WHERE Recipe_No = NEW.Recipe_Noどこに追加すればよいかわかりません。

4

1 に答える 1

6

実際、トリガーがトリガーされるたびに、レシピからすべての行が更新されます。NEW.Recipe_No疑似列を使用して、影響を受けるレシピレコードのみに更新を制限できます。

CREATE TRIGGER update_avg AFTER INSERT ON `Ratings`
FOR EACH ROW UPDATE Recipes
  SET Rating_Avg = (SELECT AVG(Rating) from Ratings where Ratings.Recipe_No=Recipes.Recipe_No)
WHERE Recipes.Recipe_No=NEW.Recipe_No
于 2013-03-21T17:43:13.147 に答える