0

私の一般的な目標は次のようなものです。多くの翻訳を含むテーブルがあります。各翻訳には評価があります。ユーザーからのすべての評価の平均です。各翻訳には一意の ID があり、2 番目のテーブルには、翻訳をランク付けした各ユーザーの評価 (userId、translationId、rating) を保存しています。

ユーザーが新しい翻訳をランク付けするか、古いレートを変更するたびに、この翻訳の平均評価を更新したい

次のテーブルがあります。

Create Table if not exists Translation
        (TranslationID int (12) NOT NULL UNIQUE AUTO_INCREMENT,
        UserID int (10) NOT NULL, 
        ImageID int (10) NOT NULL, 
        ChainID int (2) NOT NULL,
        Translation text,
        TranslationRating double Default 0 CHECK (TranslationRating>=0 AND TranslationRating<=5),
        NumOfRatings int (10) Default 0,
        CONSTRAINT translations PRIMARY KEY (UserID,ImageID, ChainID),
        FOREIGN KEY (UserID) REFERENCES Users(UserID) ON DELETE CASCADE,
        FOREIGN KEY (ImageID) REFERENCES Images(ImageID) ON DELETE CASCADE)

Create Table if not exists TranslationsRating
        (UserID int (10) NOT NULL , 
        TranslationID int (3) NOT NULL,
        Rating double Default 0 CHECK (TranslationRating>=0 AND TranslationRating<=5),
        CONSTRAINT known_lang PRIMARY KEY (UserID,TranslationID),
        FOREIGN KEY (UserID) REFERENCES Users(UserID) ON DELETE CASCADE,
        FOREIGN KEY (TranslationID) REFERENCES Translation(TranslationID) ON DELETE CASCAD

これは、新しい行が「TranslationsRating」に挿入されるか、このテーブルの評価列を更新するたびに、変更されたばかりの行の translationId を取得し、「translation」テーブルでこの translationId 評価を更新することを意味します (すべての評価を検索します)。 'TranslationsRating' でこの ID を取得し、平均を計算します)

次のトリガーを定義しようとしています。

CREATE TRIGGER UPDATE_TRANS_RATING
AFTER UPDATE ON TRANSLATIONSRATING
FOR EACH ROW
BEGIN
UPDATE TRANSLATION SET TRANSLATIONRATING = (SELECT AVG(RATING) FROM TRANSLATIONSRATING 
WHERE TRANSLATIONSRATING.TRANSLATIONID = RATINGNEW.ID)
END;

次のエラー メッセージが表示されます (phpMyAdmin を使用しています)。

MySQL said: #1303 - Can't create a TRIGGER from within another stored routine

私の質問は、このエラーは何ですか、そして私のトリガーが私の目標を達成する良い方法で書かれている場合

4

0 に答える 0