MySQL Trigger не сработает - PullRequest
       17

MySQL Trigger не сработает

0 голосов
/ 16 марта 2019

Вот в чем дело.Мой триггер работает - я проверил его с более простым кодом.но по какой-то причине мое утверждение select, похоже, возвращает false, хотя я его проверил, и это действительно так.Могу ли я не включать такую ​​логику в триггер или что-то?Я работаю над этим дольше, чем могу с гордостью признать, и больше это не имеет смысла.Любое понимание будет с благодарностью.благодарю вас!

Редактировать: Я, вероятно, должен учитывать тот факт, что база данных juiceApp отличается от той, что содержит этот триггер.Но я не могу получить от него идентификатор, так как он генерируется в 87586745wp db.

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 голосов
/ 16 марта 2019

Вся заслуга этого ответа принадлежит @Solarflare: Я выполнял триггер после вставки - но моя логика работала бы только с обновлением - поскольку @Solarflare справедливо предположил, что, возможно, запрашиваемые мной состояния обновлялись только после вставки. Теперь работает нормально. Спасибо.

...