18

同じテーブルで更新した後、トリガーでテーブルの列を更新するにはどうすればよいですか?
トリガーは次のとおりです。


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)

今、私が次のようにテーブルを更新すると


UPDATE products_score SET votes_1 = 5 WHERE id = 0

私は次のようになりますので、これは機能しません:

#1442-このストアド関数/トリガーを呼び出したステートメントによって既に使用されているため、ストアド関数/トリガーのテーブル'products_score'を更新できません。

では、一体どうやってこれを機能させることができるのでしょうか?

4

2 に答える 2

30

トリガーをBEFOREの代わりに変更すると、次のAFTERようになります。

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
;
于 2010-12-28T16:26:59.343 に答える
8

トリガーは、それが定義されている同じテーブルの他の行を照会できないため、セットアップした方法でこれを行うことはできません。代わりに、Before Update Trigger を使用して、目的を達成できます。

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;

または、ストアド プロシージャを使用してテーブルを更新します。

于 2010-12-28T16:27:40.470 に答える