mysqlトリガで列のidが最後に挿入された行IDと等しい列を合計する

私は次のようなWEBSITEテーブルを持っています:

WEBSITE
web ID | url         | progress
-------------------------------
1      | example.com | 67

私は次のようなPROGRESSテーブルを持っています:

PROGRESS
progress id | linking website id | amount to increase
---------------------------------------------------
1           | 1                  | 60
2           | 1                  | 7

行がINSERT INTOを使用してPROGRESSに挿入されると、

私は、PROGRESSテーブルから累積値を取得するためにphpとmysqlを使用して、新しい値をWEBSITEテーブルの進捗値に格納します。

しかしながら...

私は、私が聞いてきたこれらのトリガーを使って自動的に新しい進捗値を集計して保存することができるかどうか疑問に思っていましたか?

これは可能ですか?

0
ハハ私はいつも2mでそれを綴ってきた...私は実際に実現したことがない...歓声:)
追加された 著者 AlexMorley-Finch,
ちょっとした注意 - テーブルスキーマのスペルが間違っていますが、 m のほうが1つしかないはずです。
追加された 著者 Ben Swinburne,

2 答え

あなたはトリガーを使うことができますが、必要はありません。ちょうどこれを行う:

update website set 
progress = progress + ?
where web_id = ?

あなたの質問からあなたの価値を引き出しましょう。これは、アップデートがアトミックであるため(つまり、他のプロセスが同時に挿入/更新される心配がないため)、動作することが保証されています。

2
追加された

トリガを使用する必要はありませんが、 website の既存の行に進捗を追加するだけで済みますが、トリガを試したい場合は次のように

delimiter $$

CREATE TRIGGER progress_update AFTER INSERT ON `progress`
  FOR EACH ROW BEGIN
    UPDATE `website` SET `progress` = `progress` + NEW.ammount_to_increase WHERE web_ID = NEW.linking_website_id;
  END;
$$

delimiter ;

You can also find further information on the syntax and use of triggers in on the manual page 12.1.11. CREATE TRIGGER Syntax

2
追加された
私はトリガーを使う必要はないと今や気づいた!しかし、例のためのおかげで提供:)
追加された 著者 AlexMorley-Finch,