Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.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 - Fatal编程技术网

来自触发器MySQL的结果集

来自触发器MySQL的结果集,mysql,sql,Mysql,Sql,这是我第一次使用触发器,我有点麻烦。 我正在创建一个通知系统,当创建一个新通知时,它将向notify表中添加一行。添加的内容取决于通知类型 到目前为止,我已经尝试: DELIMITER $$ DROP TRIGGER IF EXISTS generate_notify $$ CREATE TRIGGER generate_notify AFTER INSERT ON notifications FOR EACH ROW BEGIN SELECT @group := notify_group

这是我第一次使用触发器,我有点麻烦。 我正在创建一个通知系统,当创建一个新通知时,它将向notify表中添加一行。添加的内容取决于通知类型

到目前为止,我已经尝试:

DELIMITER $$
DROP TRIGGER IF EXISTS generate_notify $$
CREATE TRIGGER generate_notify
AFTER INSERT 
ON notifications
FOR EACH ROW
BEGIN

SELECT @group := notify_group FROM notification_types WHERE type=NEW.type;
IF (@group <> 1) THEN
INSERT INTO notify (user_id, notification_id) VALUES (NEW.user_reference, NEW.id);
ELSE

INSERT INTO notify (user_id, notification_id) VALUES(
    SELECT ID, NEW.id FROM user_customer WHERE clientID=NEW.user_reference
);
END IF;
END; $$
DELIMITER ;
我四处搜索,然后将其更改为:

DELIMITER $$
DROP TRIGGER IF EXISTS generate_notify $$
CREATE TRIGGER generate_notify
AFTER INSERT 
ON notifications
FOR EACH ROW
BEGIN
DECLARE insert_user_id INT(11);
SELECT @group := notify_group FROM notification_types WHERE type=NEW.type;
IF (@group <> 1) THEN
INSERT INTO notify (user_id, notification_id) VALUES (NEW.user_reference, NEW.id);
ELSE
SELECT ID INTO insert_user_id FROM user_customer WHERE clientID=NEW.user_reference;
INSERT INTO notify (user_id, notification_id) VALUES(insert_user_id, NEW.id);
END IF;
END; $$
DELIMITER ;
我还尝试将上述两种方法混合在一起,得到的结果要么是无法返回结果集,要么是select查询出现语法错误


另外,我假设NEW关键字是为触发器预定义的?

您的第一次尝试实际上是正确的,但是您没有将SELECT的结果写入变量。无法从触发器返回结果集

DELIMITER $$
DROP TRIGGER IF EXISTS generate_notify $$
CREATE TRIGGER generate_notify
AFTER INSERT 
ON notifications
FOR EACH ROW
BEGIN

DECLARE v_group INT;

SELECT notify_group INTO v_group FROM notification_types WHERE type=NEW.type;
IF (v_group <> 1) THEN
    INSERT INTO notify (user_id, notification_id) VALUES (NEW.user_reference, NEW.id);
ELSE
    INSERT INTO notify (user_id, notification_id) VALUES(
    SELECT ID, NEW.id FROM user_customer WHERE clientID=NEW.user_reference
);
END IF;
END $$
DELIMITER ;

谢谢你的帮助,@fancyPants,它起了很大的作用!: