2017-04-19 3 views
0

私はドライバテーブルに他のテーブルの合計ポイントを持つ非正規化データベースを持っています。ポイントがあるテーブルを更新するときに、テーブルドライバの合計ポイントを更新したいと思います。アップデート時のMySQLアップデート

このような何か:

CREATE TRIGGER sanciones_trigger BEFORE UPDATE ON points 
FOR EACH ROW 
UPDATE drivers, 
    ( SELECT pID,SUM(numpoints) AS total_points 
     FROM drivers 
     INNER JOIN points ON points.driverID = drivers.pID 
     GROUP BY drivers.pID 
    ) sum 
SET drivers.total_points= sum.total_points 
    WHERE drivers.pID = sum.pID; 

しかし、私は、トリガー内で更新傾けます。私も手技で試しましたが、どうやってそれを行うのか本当に分かりません。

どうすれば解決できますか?

答えて

0

'ポイント'テーブルで 'numpoints'を使用できる場合は、トリガーによって各更新時に 'ドライバ'にデルタを追加することができます。ただし、 'driverID'も変更している場合は、これは機能しません。以下を試してください。

ここで 'NEW'キーワードはあなたが変更する新しい値を与え、 'OLD'キーワードはテーブルに存在する値を提供します。

CREATE TRIGGER sanciones_trigger BEFORE UPDATE ON points 
FOR EACH ROW 
UPDATE drivers 
SET total_points= drivers.total_points + (NEW.numpoints - OLD.numpoints) 
    WHERE pID = NEW.driverID; 
+0

doesnt work。 エラーコード:1442.ストアドファンクション/トリガーでテーブル 'ドライバ'を更新できません。このストアドファンクション/トリガーを呼び出したステートメントですでに使用されているためです。 私はこれがUPDATEトリガーでUPDATEできないと思います。 –

+0

通常、これはトリガーを持つ同じテーブルでない限り可能です。この場合、 'ポイント'テーブルにトリガがあり、 'ドライバ'テーブルが更新されます。これはあなたが試みた完全な引き金ですか?追加のコードはありますか? – Aruna

+0

これは完全に動作します。私は運転手の街を使って何かをアップアップさせていた。それは私ができないものです。 ありがとうございます。 –

関連する問題