【发布时间】:2017-06-24 11:37:17
【问题描述】:
我有 2 个 MySQL 表, 一个将使用需要聚合的新行进行更新(表 1)。 还有一个应该使用 mysql 触发器自动填充聚合数据(表 2)。
给定表格架构:
唯一键uniqueid (uniqueid,ci,ai,status)
唯一键IX_Unique_daily (ai,ci,day)
SQL 触发器应该是这样的:
分隔符 $$
创建
插入后触发yii_botclient2.st_unqiue_trigger
开yii_botclient2.st_unique
每一行开始
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$$
分隔符;
您能帮忙解决一下 MySQL 触发器吗?
【问题讨论】:
-
你有什么问题?
-
我无法执行触发器查询,我不明白它有什么问题
标签: mysql sql triggers aggregation