0

MySQL テーブルを更新するための条件付きトリガーを見つけようとしています。問題は、入力されているデータがすでに存在していたデータと同じ場合でも、更新トリガーが起動することです。したがって、row:value がこの plus_votes:2 のように設定された列がある場合、UPDATE votes SET plus_votes = 2;実際には何も変更されていないにもかかわらず更新すると、UPDATE トリガーは引き続き起動されます。このすべてを防ぐために、このようにトリガーに条件節を追加したいと思います

BEGIN
IF NEW.vote_value <> OLD.vote_value THEN
UPDATE my_other_table
SET plus_votes =
    CASE NEW.vote_value WHEN '1'
        THEN plus_votes + 1
        ELSE plus_votes
    END,
    minus_votes =
    CASE NEW.vote_value WHEN '1'
        THEN minus_votes
        ELSE minus_votes +1
    END
WHERE my_other_table.id=NEW.votes_join_id;
END

終わり

問題の後半は、IF ステートメント内に CASE 条件があることです。誰かがこの問題を手伝って、TRIGGER 内でネストされた条件を実行する方法を示すことができますか?

とても有難い

4

1 に答える 1

0

あなたが投稿した構文は完全に間違っていますが、これを試してみてください(テストされていません)

DROP TRIGGER IF EXISTS upd_vote;

DELIMITER $$

  CREATE TRIGGER upd_vote AFTER UPDATE ON `my_other_table`
  FOR EACH ROW BEGIN
    IF NEW.vote_value <> OLD.vote_value THEN
      SET 
        NEW.plus_votes = IF(NEW.vote_value=1,OLD.plus_votes+1,OLD.plus_votes),
        NEW.minus_votes = IF(NEW.vote_value=1,OLD.minus_votes,OLD.minus_votes +1 )
    END IF;
END$$

DELIMITER ;
于 2012-10-16T06:57:28.543 に答える