2010-12-28 14 views
14

どのように私は同じテーブル上の更新後トリガーでテーブルの列を更新することができますか?ここ
はトリガーです:私は更新テーブルは

 

UPDATE products_score SET votes_1 = 5 WHERE id = 0 
 

のようにテーブルを更新するとき、私は次のことを得るよう

 

CREATE TRIGGER upd_total_votes AFTER UPDATE ON products_score 
FOR EACH ROW 
    UPDATE 
     products_score 
    SET 
     products_score.votes_total = 
      (SELECT 
       (votes_1 + votes_2 + votes_3 + votes_4 + votes_5) 
      FROM 
       products_score 
      WHERE 
       id = new.id) 
 

さて、これは、動作しません:

#1442 - Can't update table 'products_score' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

それでは、どのように地球上で私はこれを働かせることができますか?あなたの代わりにAFTERBEFOREにあなたのトリガーを変更した場合

答えて

26

あなたはこのようにそれを行うことができます:トリガーは、他の行を照会することはできませんので

CREATE TRIGGER upd_total_votes BEFORE UPDATE ON products_score 
FOR EACH ROW 
BEGIN 
    SET new.votes_total = new.votes_1 + new.votes_2 + new.votes_3 + new.votes_4 + new.votes_5 
END 
; 
+1

優秀な答え – jdborg

7

は、あなたが設定しているこの方法を使用することはできませんそれが定義されている同じテーブル。 Isteadあなたが欲しいものtoachieve更新トリガーの前に使用することができます。

CREATE TRIGGER upd_total_votes BEFORE UPDATE ON products_score FOR EACH ROW  
BEGIN 
    SET NEW.votes_total = NEW.votes_1 + NEW.votes_2 + NEW.votes_3 + NEW.votes_4 + NEW.votes_5; 
END; 

またはテーブルを更新するストアドプロシージャを使用します。更新後のトリガー内のストアドプロシージャを呼び出す

+0

同じエラーメッセージ – vladiastudillo