4

MySQL トリガー内に複数の if ステートメントがある場合、最善のアプローチは何ですか?

現在、私のSQLは次のようになっています。

IF NOT (NEW.status <=> OLD.status) THEN
  {my sql}

ELSEIF NOT (NEW.actual <=> OLD.actual) THEN
  {my sql}
END IF

一見すると、これはうまくいくようです。ただし、複数の (else)if ステートメントが true の場合、最初のステートメントのみが実行されることに気付きました (たとえば、PHP のように)。

必ずしもelseifではなく、複数のifを使用して、複数のステートメントが実行されるようにするにはどうすればよいですか? 同じアクションで複数のトリガーを作成することはできません。少なくとも phpMyAdmin はそれを示しています。複数の if を 1 つのトリガーに入れると、エラーが発生します。

4

3 に答える 3

7

理解した。トリガーの作成に phpMyAdmin のビジュアル GUI を使用する代わりに、プレーン SQL を使用しました。

だから私はこのSQLを使用しました:

delimiter //
create t1
after update
on my_table
for each row
    begin
        IF (NEW.status <> OLD.status) THEN
            {your sql}
        END IF;

        IF (NEW.actual <> OLD.actual) THEN
            {your sql}
        END IF;     
    end;//
delimiter ;

これはうまくいきます。beginphpMyAdmin GUIでトリガーを検索すると、追加する必要があるのが原因であることに気付きend;ました。

于 2013-02-14T10:36:13.077 に答える
0
if(NEW.shift = 0 )then

SELECT `max_morning` , `count_morning` into @max_morning , @count_morning FROM `count_reserve` where `date` = NEW.date_reserve;
if(@count_morning is NULL and @max_morning is NULL) then

  select `max_morning` , `max_evening` into @max_morning , @max_evening   from `work_time` where `day` = new.day;

    insert into `count_reserve` (`date`, `count_morning` ,      `count_evening`,`from_morning`, `to_morning`, `max_morning`, `from_evening`, `to_evening`, `max_evening` , `status_morning` , `status_evening`) values (NEW.date_reserve , 1 , 0 , NULL, NULL, @max_morning , NULL, NULL, @max_evening ,1, 1);


end if
end if
于 2016-12-04T09:30:06.110 に答える