2014-09-02 2 views
1

Это мой первый раз, когда я запускаю триггер, и у меня проблемы. Я создаю систему уведомлений о том, что при создании нового уведомления она добавит строку в таблицу notify. То, что добавлено, зависит от типа уведомления.Resultset from trigger MySQL

До сих пор я пытался:

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 ; 

Я также попытался смешивания выше 2 и все, что я получаю либо не может вернуть набор результатов, либо есть синтаксическая ошибка с моим запросом выбора.

(Кроме того, я предполагаю, что NEW ключевого слова предопределено для триггеров?)

ответ

1

Вашей первая попытка была на самом деле на правильном пути, но вы не написали результат вашего 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 ; 
+0

Благодарим за помощь, @fancyPants, это сработало как шарм! :) –