这是东西。我的触发器有效-我已经用更简单的代码对其进行了测试。但是由于某种原因,即使我已经测试了它,但我的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
答案 0 :(得分:0)
此答案的全部功劳归@Solarflare: 我在插入后实现了触发器-但我的逻辑只能在更新上使用-如@Solarflare正确建议,也许我正在查询的状态仅在插入后才更新。现在可以正常工作了。谢谢。