【发布时间】:2017-08-11 02:12:20
【问题描述】:
我想在INSERT 上创建一个 MySQL 触发器:当在wp_posts 表中插入新记录时,我想更新wp_posts.post_author 从其他两个表中检索数据,使用两个子查询(我想这个可以做得更好)。
无论如何,更新应该是“有条件的”,即只有当wp_posts.post_title 的值为“A”、“B”或“C”时才必须更新行。这可能吗?
这是我尝试过的:
CREATE TRIGGER updatePostIDonInsert
AFTER INSERT
ON wp_posts FOR EACH ROW
BEGIN
-- variable declarations
-- trigger code
// ? (pseudo: if wp_posts.post_title IN ("A","B","C") then...)
UPDATE wp_posts SET post_author =
(SELECT ID from wp_users WHERE user_email =
(SELECT meta_value FROM `wp_postmeta` WHERE post_id = wp_posts.ID AND meta_key = "_from_email"))
END;
感谢任何帮助
[UPDATE] 我尝试的最新查询:
CREATE TRIGGER updatePostIDonInsert
BEFORE INSERT
ON wp_posts FOR EACH ROW
BEGIN
IF FIND_IN_SET(NEW.post_title,'General contact,Website contact,Master contact') > 0 AND NEW.post_type ='inbound_com' THEN
SET NEW.post_author = (SELECT ID from wp_users WHERE user_email = (SELECT meta_value FROM wp_postmeta WHERE post_id = NEW.ID AND meta_key = '_from_email'));
END IF;
END;
(如果通过 PhpMyAdmin 触发器部分插入,但没有最终的 END 并从 IF 开始,则此方法有效)
【问题讨论】:
-
我不认为你可以更新正在执行插入触发器的同一个表,你可以做的是拥有 BEFORE INSERT TRIGGER 并修改 post_author 的值,以便将修改后的值一起插入与您的插入查询的其他值。 SET NEW.post_author =
如果值来自子查询,则应返回单个记录。 -
好的,感谢您指出这一点(我对触发器很陌生,我通常不使用 dbs)
-
请注意,如果您想访问将插入的 valueof 字段,您需要使用 NEW 关键字。即 IF FIND_IN_SET(NEW.post_title,'A,B,C,D') > 0 THEN。改用FIND_IN_SET 函数
-
@Learning 你为什么不发布触发器的整个代码?也就是说,我感谢您的 cmets,但我也可以接受您的回答 :-)
-
我忘了说 post_type (另一列)必须包含某个值,但我想我可以使用 FIND_IN_SET 两次