0

作成しようとしている MySQL トリガーがありますが、正しい構文を取得できません。

トリガーが通過し、データベースに挿入された新しい投稿のタイトルに対して一連のキーワードを照合する必要があります。一致が見つかった場合、新しい投稿をそのバケットに割り当て、バケットのキーワード セットを更新する必要があります。一致が見つからない場合は、投稿の値を使用して新しいバケットを作成する必要があります。エラーは IF EXISTS で始まる行を指していますが、何が問題なのかわかりません。どんな助けでも大歓迎です。ありがとう!


更新: IF EXISTS を引き出すようにコードが更新されましたが、ELSE ステートメントからエラーが発生しています。

delimiter $$

CREATE TRIGGER bucket_trigger_v1 BEFORE INSERT ON posts
FOR EACH ROW
  BEGIN
    set @target = NEW.post_title;
    set @bucket_id_number = '';
    set @bucket_relevance = '';

    SELECT idbuckets, MATCH (keywords) AGAINST (@target) AS score INTO @bucket_id_number, @bucket_relevance FROM buckets WHERE MATCH (keywords) AGAINST (@target) ORDER BY score DESC LIMIT 1;
    IF (@bucket_id_number != '') THEN
      BEGIN
        SET NEW.buckets_idbuckets = @bucket_id_number;
        UPDATE buckets SET keywords = concat(keywords, @target) WHERE idbuckets = @bucket_id_number;
      END
      ELSE
      BEGIN
        INSERT INTO buckets (idbuckets, keywords, creationdate) VALUES (, @target, NEW.postdate);
        SET NEW.bucket_idbuckets = (SELECT LAST_INSERT_ID());
      END
    END IF;
END;

$$
4

2 に答える 2

0

MySQL、または少なくとも私が実行しているバージョンは、一度に複数のトリガーを処理できません。このため、IF ステートメントが BEGIN と END で機能しないため、別の解決策を見つける必要があります。

于 2013-11-05T23:37:07.690 に答える