2014-06-29 79 views
0

这是我目前的触发:需要帮助定制的mysql触发

DELIMITER $$ 
CREATE DEFINER=`root`@`127.0.0.1` TRIGGER `unique_visit_new_campaign` AFTER INSERT ON `unique_visit` FOR EACH ROW 
BEGIN 
    DECLARE done INT DEFAULT FALSE; 
    DECLARE pixel_id int; 
    DECLARE campaign_id varchar(45); 
    DECLARE cur CURSOR FOR SELECT id FROM pixels; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; 
    OPEN cur; 
      ins_loop: LOOP 
       FETCH cur INTO pixel_id; 
       IF done THEN 
        LEAVE ins_loop; 
       END IF; 
       INSERT IGNORE INTO pixels_campaign (campaign_id , pixel_id , date) VALUES (NEW.campaign_id ,pixel_id, current_timestamp); 
      END LOOP; 
     CLOSE cur; 
END 

我需要它不会触发时new.campaign_id为空或等于字符串{} CAMPAIGN_ID

我试着使用MySQL如果但没有成功。

另外,它有点自动增量,即使有一个活动id已经(当它忽略)。任何方式我可以阻止这种情况发生?

回答

1

你试过这个吗?

DELIMITER $$ 
CREATE DEFINER=`root`@`127.0.0.1` TRIGGER `unique_visit_new_campaign` AFTER INSERT ON `unique_visit` FOR EACH ROW 
BEGIN 
    DECLARE done INT DEFAULT FALSE; 
    DECLARE pixel_id int; 
    DECLARE campaign_id varchar(45); 
    DECLARE cur CURSOR FOR SELECT id FROM pixels; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; 

    IF new.campaign = '' or new.campaign = '{campaign_id}' or new.campaign is null THEN 

     OPEN cur; 
       ins_loop: LOOP 
        FETCH cur INTO pixel_id; 
        IF done THEN 
         LEAVE ins_loop; 
        END IF; 
        INSERT IGNORE INTO pixels_campaign (campaign_id , pixel_id , date) VALUES (NEW.campaign_id ,pixel_id, current_timestamp); 
       END LOOP; 
      CLOSE cur; 
    END IF 

END 
+0

我确实是,但看起来并不合适。非常感谢 –