0

次のスキーマがあります: SQL Fiddle

トリガーは、articles.votes フィールドを更新しています。また、articles.votes フィールドを更新するのと同じ式で members.points フィールドとメンバーのlifetime_points フィールドを更新する必要があります。それ、どうやったら出来るの?

4

1 に答える 1

1

これを探していますか?

DELIMITER $$
CREATE TRIGGER tg_ai_article_votes
AFTER INSERT ON article_votes
FOR EACH ROW 
BEGIN
  UPDATE articles
     SET votes = COALESCE(votes, 0) + 1
   WHERE id = NEW.article_id;
  UPDATE members
     SET points = COALESCE(points, 0) + 1,
         lifetime_points = COALESCE(lifetime_points, 0) + 1
   WHERE id = NEW.member_id;
END$$

CREATE TRIGGER tg_ad_article_votes
AFTER DELETE ON article_votes
FOR EACH ROW 
BEGIN
  UPDATE articles
     SET votes = COALESCE(votes, 0) - 1
   WHERE id = OLD.article_id;
  UPDATE members
     SET points = COALESCE(points, 0) - 1,
         lifetime_points = COALESCE(lifetime_points, 0) - 1
   WHERE id = OLD.member_id;
END$$
DELIMITER ;

これがSQLFiddleのデモです

于 2013-08-30T00:57:09.440 に答える