2013-02-13 5 views
2

Если у вас есть несколько операторов if в триггере MySQL, какой наилучший подход?Несколько операторов if в MySQL trigger

В настоящее время мой SQL выглядит следующим образом:

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

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

На первый взгляд это похоже на работу. Тем не менее, я заметил, что, когда несколько (if) if-операторов истинны, выполняется только первый (как в PHP, например).

Как я могу использовать только несколько if, не обязательно elseif, так что выполняется более одного оператора? Создание нескольких триггеров с одним и тем же действием невозможно, по крайней мере, это то, что показывает phpMyAdmin. Помещение нескольких элементов if в один триггер приводит к ошибкам.

ответ

5

Фигурные его. Вместо использования визуального GUI в phpMyAdmin для создания триггеров я использовал простой 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 ; 

Который работает отлично. Когда вы открываете триггер в графическом интерфейсе phpMyAdmin, я заметил, что это связано с begin и end;, которые необходимо добавить.

+0

Я заметил, что это из-за начала и конца; которые нужно добавить ..... Это реальная точка –

-2

Использование так:

IF (NEW.status <> OLD.status) THEN 
    <statement> 
ELSEIF (NEW.actual <> OLD.actual) THEN 
    <statement> 
END IF; 
+1

Что производит то же самое? Когда первый IF равен true, elseif не выполняется. – edwardmp

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 
Смежные вопросы