1
我有2个MySQL表, 一个将与需要汇总(表1)新行进行更新。 ,以及一个应该使用mysql触发器自动填充聚合数据的表(表2)。MySQL的触发器为聚集一个表的行到另一个表
鉴于表的模式:
UNIQUE KEY uniqueid
(uniqueid
,ci
,ai
,status
)
UNIQUE KEY IX_Unique_daily
(ai
,ci
,day
)
的SQL触发器应该是这样的:
DELIMITER $$
CREATE TRIGGER yii_botclient2
。 st_unqiue_trigger
AFTER INSERT ON yii_botclient2
。 st_unique
FOR EACH ROW BEGIN
SET @myDay := DATE(NEW.date);
SET @today = DATE();
SET isDaily := SELECT COUNT(id) FROM `yii_botclient2`.`st_daily` WHERE `ai` = NEW.ai AND st_daily.ci = NEW.ci AND st_daily.day = @myDay;
SET myDaily = IFNULL(isDaily, 'No');
IF (myDaily = 'No') THEN
IF NEW.status = 0
INSERT INTO st_daily (`day`, `ai`,`ci`,`impressions`,`updated`) VALUES (@today,NEW.ai,NEW.ci,1,NOW());
ELSEIF NEW.status = 1
INSERT INTO st_daily (`day`, `ai`,`ci`,`clicks`,`updated`) VALUES (@today,NEW.ai,NEW.ci,1,NOW());
ELSEIF NEW.status = 2
INSERT INTO st_daily (`day`, `ai`,`ci`,`leads`,`updated`) VALUES (@today,NEW.ai,NEW.ci,1,NOW());
ELSEIF NEW.status = 3
INSERT INTO st_daily (`day`, `ai`,`ci`,`ftds`,`updated`) VALUES (@today,NEW.ai,NEW.ci,1,NOW());
END IF;
ELSE
IF NEW.status = 0
UPDATE st_daily SET `impressions` = `impressions` + 1 WHERE st_daily.ci = NEW.ci AND st_daily.ai = NEW.ai AND st_daily.day = @myDay;
ELSEIF NEW.status = 1
UPDATE st_daily SET `clicks` = `clicks` + 1 WHERE st_daily.ci = NEW.ci AND st_daily.ai = NEW.ai AND st_daily.day = @myDay;
ELSEIF NEW.status = 2
UPDATE st_daily SET `leads` = `leads` + 1 WHERE st_daily.ci = NEW.ci AND st_daily.ai = NEW.ai AND st_daily.day = @myDay;
ELSEIF NEW.status = 3
UPDATE st_daily SET `ftds` = `ftds` + 1 WHERE st_daily.ci = NEW.ci AND st_daily.ai = NEW.ai AND st_daily.day = @myDay;
END IF;
END IF;
END$$
DELIMITER;
你能帮忙用MySQL触发器吗?
您有什么问题? –
我无法执行触发器查询,我不明白它有什么问题 –