2014-09-02 60 views
1

這是我第一次使用觸發器,我遇到了一些麻煩。 我正在創建一個通知系統,當新通知被創建時,它將向notify表添加一行。添加的內容取決於它的通知類型。來自觸發器的結果集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和所有我得到要麼不能返回結果集,要麼我的select查詢出現語法錯誤。

(另外,我假設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,它的工作就像一個魅力! :) – 2014-09-02 10:36:48