2014-10-31 126 views
0

好吧,所以我需要創建一個after插入觸發器,需要使用if elseif和elseif。 if,elseif,elseif需要基於從其他3個數據庫表中獲取的查詢數據。我想知道是否有一種方法可以做到這一點,而不必在開始時運行所有三個查詢。Mysql觸發if語句和變量

BEGIN 
    SET @t3 = (SELECT team_id FROM team_trans WHERE key1 = NEW.trans_id LIMIT 1); 
     SET @t2 = (SELECT team_id FROM team_assignments WHERE team_assignments.misc_id = NEW.STORE_ID AND team_assignments.type = 1); 
     SET @t1 = (SELECT team_id FROM team_assignments WHERE team_assignments.misc_id = NEW.CUSTOMER_ID AND team_assignments.type = 0); 
IF (@t3) THEN 
       INSERT INTO team_trans (team_id, trans_id, type, misc_id) VALUES (@t3, NEW.id, 0, 1);  
     ELSEIF (@t1) THEN 
      INSERT INTO team_trans (team_id, trans_id, type, misc_id) VALUES (@t1, NEW.id, 0, 1); 
     ELSEIF (@t2) THEN 
      INSERT INTO team_trans (team_id, trans_id, type, misc_id) VALUES (@t2, NEW.id, 0, 1); 
     END IF; 
    END 

回答

1

的選項是:

... 
BEGIN  
    /* 
    SET @t3 = (SELECT team_id FROM team_trans WHERE key1 = NEW.trans_id LIMIT 1)// 
    SET @t2 = (SELECT team_id FROM team_assignments WHERE team_assignments.misc_id = NEW.STORE_ID AND team_assignments.type = 1)// 
    SET @t1 = (SELECT team_id FROM team_assignments WHERE team_assignments.misc_id = NEW.CUSTOMER_ID AND team_assignments.type = 0)// 
    */  
    IF (SELECT @t3 := team_id 
      FROM team_trans 
      WHERE key1 = NEW.trans_id 
      LIMIT 1) THEN 
     INSERT INTO team_trans (team_id, trans_id, type, misc_id) 
     VALUES 
     (@t3, NEW.id, 0, 1);  
    ELSEIF (SELECT @t1 := team_id 
        FROM team_assignments 
        WHERE team_assignments.misc_id = NEW.CUSTOMER_ID AND team_assignments.type = 0) THEN 
     INSERT INTO team_trans (team_id, trans_id, type, misc_id) 
     VALUES 
     (@t1, NEW.id, 0, 1); 
    ELSEIF (SELECT @t2 := team_id 
        FROM team_assignments 
        WHERE team_assignments.misc_id = NEW.STORE_ID AND team_assignments.type = 1) THEN 
     INSERT INTO team_trans (team_id, trans_id, type, misc_id) 
     VALUES 
     (@t2, NEW.id, 0, 1); 
    END IF; 
END// 
...