我们如何使用触发器的NEW.columns作为INSERT - SELECT WHERE子句的一部分?

时间:2017-07-30 03:19:38

标签: mysql

我创建了一个LOCAL支持票务应用程序,允许用户创建票证并提交给支持部门。每个创建的票证都会向支持部门中的所有代理广播。所以我决定使用MySQL TRIGGER - AFTER INSERT来捕获我的票证表的每张传入票证,并使用INSERT ... SELECT来填充新票证和支持部门以及代理商。

下面是我的触发器,以及它为什么不插入任何内容。我想我不会得到NEW.PK_tickets和NEW.FK_users的价值。

DELIMITER $$

USE `support`$$

DROP TRIGGER /*!50032 IF EXISTS */ `trsample`$$

CREATE
/*!50017 DEFINER = 'root'@'localhost' */
TRIGGER `trtickets` AFTER INSERT ON `tickets` 
FOR EACH ROW BEGIN

/** (start) push all notification **/
INSERT INTO `notifications`(`TRX`,`from`,`to`,`content`, `type`,`created_at`)
SELECT DISTINCT
    `tickets`.`PK_tickets`, `tickets`.`FK_users`, `users_departments`.`FK_users`, `tickets`.`subject`, 'TIX', `tickets`.`created_at`
FROM `tickets`

JOIN (
    SELECT `tickets_from`.`FK_tickets`,`tickets_from`.`FK_departments` FROM `tickets_from`
    UNION DISTINCT
    SELECT `tickets_to`.`FK_tickets`,`tickets_to`.`FK_departments` FROM `tickets_to` ) j1
ON j1.`FK_tickets` = `tickets`.`PK_tickets`

JOIN `users_departments`
ON `users_departments`.`FK_departments` = j1.`FK_departments`

WHERE `tickets`.`PK_tickets` = NEW.PK_tickets AND `users_departments`.`FK_users` <> NEW.FK_users;
/** (end) push all notification **/

END;
$$

DELIMITER ;

仔细检查我的SQL查询我使用存储过程,它运行

DELIMITER $$

USE `support`$$

DROP PROCEDURE IF EXISTS `spnottickets`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `spnottickets`(IN IN_PK_tickets INT, IN IN_FK_users INT)
BEGIN

/** (start) push all notification **/
INSERT INTO `notifications`(`TRX`,`from`,`to`,`content`, `type`,`created_at`)
SELECT DISTINCT
    `tickets`.`PK_tickets`, `tickets`.`FK_users`, `users_departments`.`FK_users`, `tickets`.`subject`, 'TIX', `tickets`.`created_at`
FROM `tickets`

JOIN (
    SELECT `tickets_from`.`FK_tickets`,`tickets_from`.`FK_departments` FROM `tickets_from`
    UNION DISTINCT
    SELECT `tickets_to`.`FK_tickets`,`tickets_to`.`FK_departments` FROM `tickets_to` ) j1
ON j1.`FK_tickets` = `tickets`.`PK_tickets`

JOIN `users_departments`
ON `users_departments`.`FK_departments` = j1.`FK_departments`

WHERE `tickets`.`PK_tickets` = IN_PK_tickets AND `users_departments`.`FK_users` <> IN_FK_users;
/** (end) push all notification **/

END$$

DELIMITER ;

我们可以使用NEW.columns作为WHERE子句的一部分吗?

0 个答案:

没有答案