MySQL触发器不会触发

时间:2019-03-16 05:36:38

标签: php mysql phpmyadmin mysql-workbench

这是东西。我的触发器有效-我已经用更简单的代码对其进行了测试。但是由于某种原因,即使我已经测试了它,但我的select语句似乎仍返回false,这的确是真的。我可以在触发器之类的东西中不包括这种逻辑吗?我从事此工作的时间超过了我自豪地承认的时间,而且没有任何意义了。任何见识将不胜感激。谢谢!

编辑:我可能应该包括一个事实,juiceApp数据库是与持有此触发器的数据库不同的数据库。但是我无法从中获取ID,因为它是在87586745wp数据库中生成的。

CREATE DEFINER=`mysqluser`@`localhost` TRIGGER `87586745wp`.`wp_posts_AFTER_INSERT` AFTER INSERT ON `wp_posts` FOR EACH ROW
BEGIN
DECLARE no_data INT DEFAULT 0;
DECLARE email VARCHAR(255);
DECLARE user_id INT;
DECLARE email_cursor CURSOR FOR
    SELECT DISTINCT au.UserID, au.UserEmailAddress
    FROM `JuiceApp`.`AppPreferences` ap
    JOIN `JuiceApp`.`AppUsers` au ON au.UserID = ap.UserID 
    WHERE ap.PreferenceControlID = 1 
    AND ap.PreferenceValue = 1;

DECLARE CONTINUE HANDLER FOR
    NOT FOUND SET no_data = 1;

SET @sub = 'Broken Glass';

-- if article part of campaign 
IF NEW.ID IN (
    SELECT post.ID
    FROM wp_posts post
    INNER JOIN wp_term_relationships rel ON rel.object_id = post.ID
    INNER JOIN wp_terms t ON t.term_id = rel.term_taxonomy_id
    WHERE post.post_status = 'publish' 
    AND post.post_type = 'post' 
    AND t.term_id = 25) 
THEN
    OPEN email_cursor;
        send_email_loop: LOOP
            FETCH email_cursor INTO user_id, email;
            IF no_data = 1 THEN 
                LEAVE send_email_loop;
            END IF;
            -- record email to be sent
            INSERT INTO `JuiceApp`.`EmailQueue` (ArticleID, RecipientID, RecipientEmail, Subject)
            VALUES (NEW.ID, user_id, email, @sub);
        END LOOP send_email_loop;
    CLOSE email_cursor;
END IF;

END

1 个答案:

答案 0 :(得分:0)

此答案的全部功劳归@Solarflare: 我在插入后实现了触发器-但我的逻辑只能在更新上使用-如@Solarflare正确建议,也许我正在查询的状态仅在插入后才更新。现在可以正常工作了。谢谢。