Question

I am making a wizard using mysql triggers and stored procedures.So far i have this

delimiter $$
CREATE TRIGGER le_trigger
AFTER INSERT ON inbox
FOR EACH ROW
BEGIN
declare last_inserted_number VARCHAR(100) DEFAULT '0800100200';
declare last_inserted_message VARCHAR(100) DEFAULT 'Lorem Ipsum';

set last_inserted_number = NEW.in_number;
set last_inserted_message = NEW.in_message;

if (not exists(select id from transactions where tel = last_inserted_number)) then
    insert into transactions(message, tel)
        values(last_inserted_message, last_inserted_number);
        insert into outbox(out_message, out_number)
        values("go to step 1", last_inserted_number);
else

   if ( exists(select id from transactions where tel = last_inserted_number && step_1='')) then
    update transactions set step_1=last_inserted_message where 
     tel=last_inserted_number;
       insert into outbox(out_message, out_number)
        values("go to step 2", last_inserted_number);
end if;

   if ( exists(select id from transactions where tel = last_inserted_number && step_2='')) then
    update transactions set step_2=last_inserted_message where 
     tel=last_inserted_number;
       insert into outbox(out_message, out_number)
        values("go to step 3", last_inserted_number);
end if;

   if ( exists(select id from transactions where tel = last_inserted_number && step_3='')) then
    update transactions set step_3=last_inserted_message where 
     tel=last_inserted_number;
       insert into outbox(out_message, out_number)
        values("go to step 4", last_inserted_number);
end if;

   if ( exists(select id from transactions where tel = last_inserted_number && step_4='')) then
    update transactions set step_4=last_inserted_message where 
     tel=last_inserted_number;
       insert into outbox(out_message, out_number)
        values("go to step 5", last_inserted_number);
end if;

   if ( exists(select id from transactions where tel = last_inserted_number && step_5='')) then
    update transactions set step_5=last_inserted_message where 
     tel=last_inserted_number;
       insert into outbox(out_message, out_number)
        values("go to step 6", last_inserted_number);
end if;

   if ( exists(select id from transactions where tel = last_inserted_number && step_6='')) then
    update transactions set step_6=last_inserted_message where 
     tel=last_inserted_number;
       insert into outbox(out_message, out_number)
        values("go to step 7", last_inserted_number);
end if;

   if ( exists(select id from transactions where tel = last_inserted_number && step_7='')) then
    update transactions set step_7=last_inserted_message where 
     tel=last_inserted_number;
       insert into outbox(out_message, out_number)
        values("go to step 8", last_inserted_number);
end if;

   if ( exists(select id from transactions where tel = last_inserted_number && step_8='')) then
    update transactions set step_8=last_inserted_message where 
     tel=last_inserted_number;
       insert into outbox(out_message, out_number)
        values("go to step 9", last_inserted_number);
end if;

   if ( exists(select id from transactions where tel = last_inserted_number && step_9='')) then
    update transactions set step_9=last_inserted_message where 
     tel=last_inserted_number;
       insert into outbox(out_message, out_number)
        values("success.you have completed the form", last_inserted_number);
end if;

end if;

END$$
delimiter ;

but the problem is all the ifs are executed at the same time and no wizard like behavior is achieved.The plan is to watch table inbox and grab the message and the senders number after an insert trigger.Is it possible to exit the loop when this is true

else

   if ( exists(select id from transactions where tel = last_inserted_number && step_1='')) then
    update transactions set step_1=last_inserted_message where 
     tel=last_inserted_number;
       insert into outbox(out_message, out_number)
        values("go to step 2", last_inserted_number);
end if;
exit..here

... more step_* code....

and carry on after another insert on inbox?.

Was it helpful?

Solution

Don't write the code as separate statements. Use elseif (you can read the documentation here):

if (not exists(select id from transactions where tel = last_inserted_number)) then
    insert into transactions(message, tel)
        values(last_inserted_message, last_inserted_number);
        insert into outbox(out_message, out_number)
        values("go to step 1", last_inserted_number);
elseif ( exists(select id from transactions where tel = last_inserted_number && step_1='')) then
    update transactions set step_1=last_inserted_message where 
     tel=last_inserted_number;
       insert into outbox(out_message, out_number)
        values("go to step 2", last_inserted_number);
elseif ( exists(select id from transactions where tel = last_inserted_number && step_2='')) then
    update transactions set step_2=last_inserted_message where 
     tel=last_inserted_number;
       insert into outbox(out_message, out_number)
        values("go to step 3", last_inserted_number);
elseif ( exists(select id from transactions where tel = last_inserted_number && step_3='')) then
    update transactions set step_3=last_inserted_message where 
     tel=last_inserted_number;
       insert into outbox(out_message, out_number)
        values("go to step 4", last_inserted_number);
elseif ( exists(select id from transactions where tel = last_inserted_number && step_4='')) then
    update transactions set step_4=last_inserted_message where 
     tel=last_inserted_number;
       insert into outbox(out_message, out_number)
        values("go to step 5", last_inserted_number);
elseif ( exists(select id from transactions where tel = last_inserted_number && step_5='')) then
    update transactions set step_5=last_inserted_message where 
     tel=last_inserted_number;
       insert into outbox(out_message, out_number)
        values("go to step 6", last_inserted_number);
elseif ( exists(select id from transactions where tel = last_inserted_number && step_6='')) then
    update transactions set step_6=last_inserted_message where 
     tel=last_inserted_number;
       insert into outbox(out_message, out_number)
        values("go to step 7", last_inserted_number);
elseif ( exists(select id from transactions where tel = last_inserted_number && step_7='')) then
    update transactions set step_7=last_inserted_message where 
     tel=last_inserted_number;
       insert into outbox(out_message, out_number)
        values("go to step 8", last_inserted_number);
elseif ( exists(select id from transactions where tel = last_inserted_number && step_8='')) then
    update transactions set step_8=last_inserted_message where 
     tel=last_inserted_number;
       insert into outbox(out_message, out_number)
        values("go to step 9", last_inserted_number);
elseif ( exists(select id from transactions where tel = last_inserted_number && step_9='')) then
    update transactions set step_9=last_inserted_message where 
     tel=last_inserted_number;
       insert into outbox(out_message, out_number)
        values("success.you have completed the form", last_inserted_number);
end if;

I'm not 100% sure this is the logic that you want. If not, it should guide you on what to do.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top