Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于聚合一个表的MySQL触发器';将行移动到另一个表_Mysql_Sql_Triggers_Aggregation - Fatal编程技术网

用于聚合一个表的MySQL触发器';将行移动到另一个表

用于聚合一个表的MySQL触发器';将行移动到另一个表,mysql,sql,triggers,aggregation,Mysql,Sql,Triggers,Aggregation,我有两张MySQL表, 将使用需要聚合的新行进行更新的行(表1)。 还有一个应该使用mysql触发器自动填充聚合数据(表2) 给定表架构: 表1的示例: 要聚合的表 唯一键uniqueid(uniqueid,ci,ai,状态) 表2的示例: 聚合表 唯一键IX\u UNIQUE\u daily(ai,ci,day) SQL触发器应该类似于: 分隔符$$ 创造 触发器yii_botclient2st_unqiue_触发器插入后 在yii_botclient2st_unique 每行开始 SET

我有两张MySQL表, 将使用需要聚合的新行进行更新的行(表1)。 还有一个应该使用mysql触发器自动填充聚合数据(表2)

给定表架构:

表1的示例: 要聚合的表

唯一键
uniqueid
uniqueid
ci
ai
状态

表2的示例: 聚合表

唯一键
IX\u UNIQUE\u daily
ai
ci
day

SQL触发器应该类似于:

分隔符$$

创造 触发器
yii_botclient2
st_unqiue_触发器插入后
在
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触发器吗

声明变量,在set语句中使用=,日期函数需要一个参数,如果语句需要,则使用 类似这样的编译会导致它抱怨表不存在,如果您需要任何进一步的帮助,请以文本或sql FIDLE的形式提供问题中的表

drop trigger if exists st_unqiue_trigger; 

DELIMITER $$

CREATE TRIGGER yii_botclient2.st_unqiue_trigger AFTER INSERT ON st_unique FOR EACH ROW BEGIN
declare myday date;
declare today  date;
declare isdaily int;
declare mydaily varchar(2);
SET myDay = DATE(NEW.date);
SET today = date(now());
SELECT COUNT(id) into isdaily 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 then
        INSERT INTO st_daily (`day`, `ai`,`ci`,`impressions`,`updated`) VALUES (today,NEW.ai,NEW.ci,1,NOW());
    ELSEIF NEW.status = 1 then
        INSERT INTO st_daily (`day`, `ai`,`ci`,`clicks`,`updated`) VALUES (today,NEW.ai,NEW.ci,1,NOW());
    ELSEIF NEW.status = 2 then
        INSERT INTO st_daily (`day`, `ai`,`ci`,`leads`,`updated`) VALUES (today,NEW.ai,NEW.ci,1,NOW());
    ELSEIF NEW.status = 3 then
        INSERT INTO st_daily (`day`, `ai`,`ci`,`ftds`,`updated`) VALUES (today,NEW.ai,NEW.ci,1,NOW());
    END IF;
ELSE
    IF NEW.status = 0 then
        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 then
        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 then
        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 then
        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 ;

声明变量,在set语句中使用=时,日期函数需要一个参数,如果语句需要,则使用 类似这样的编译会导致它抱怨表不存在,如果您需要任何进一步的帮助,请以文本或sql FIDLE的形式提供问题中的表

drop trigger if exists st_unqiue_trigger; 

DELIMITER $$

CREATE TRIGGER yii_botclient2.st_unqiue_trigger AFTER INSERT ON st_unique FOR EACH ROW BEGIN
declare myday date;
declare today  date;
declare isdaily int;
declare mydaily varchar(2);
SET myDay = DATE(NEW.date);
SET today = date(now());
SELECT COUNT(id) into isdaily 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 then
        INSERT INTO st_daily (`day`, `ai`,`ci`,`impressions`,`updated`) VALUES (today,NEW.ai,NEW.ci,1,NOW());
    ELSEIF NEW.status = 1 then
        INSERT INTO st_daily (`day`, `ai`,`ci`,`clicks`,`updated`) VALUES (today,NEW.ai,NEW.ci,1,NOW());
    ELSEIF NEW.status = 2 then
        INSERT INTO st_daily (`day`, `ai`,`ci`,`leads`,`updated`) VALUES (today,NEW.ai,NEW.ci,1,NOW());
    ELSEIF NEW.status = 3 then
        INSERT INTO st_daily (`day`, `ai`,`ci`,`ftds`,`updated`) VALUES (today,NEW.ai,NEW.ci,1,NOW());
    END IF;
ELSE
    IF NEW.status = 0 then
        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 then
        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 then
        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 then
        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 ;

你有什么问题?我不能执行触发器查询,我不明白它有什么问题?你有什么问题?我不能执行触发器查询,我不明白它有什么问题