首页 > 解决方案 > 插入后的 SQL 触发器未将值插入新表

问题描述

我有一个 wordpress 网站和一个插件,可以用来导入产品。导入产品时,它会附加元标记,如下所示(47226 是产品,47227 是 47226 的变体):在此处输入图像描述

当通过插件导入新项目时,它会自动将所有这些元数据插入一个名为 wp_postmeta 的表中。
由于每个产品总是有 '_price' ,而变体同时有 '_price' 和 '_regular_price',我试图只提取 '_price' 和 '_regular_price' 行,以及 post_id、meta_key 和 meta_value 的各自值,然后保存将这些值添加到带有触发器的名为 original_price 的新表中。

该插件还将价格更新插入到 original_price 表中现有产品的 wp_postmeta 中,所以我想排除它们,只插入 original_prices 表中不存在的项目。

到目前为止,我的触发器是:

DELIMITER //
CREATE TRIGGER `new_import_INSERT` AFTER INSERT ON `wp_postmeta`
 FOR EACH ROW BEGIN
INSERT INTO original_prices (date_added,post_id,meta_key,meta_starting_price)
SELECT now(),post_id,meta_key,meta_value FROM wp_postmeta 
WHERE post_id=NEW.post_id AND NEW.meta_key IN ('_price','_regular_price') AND NOT EXISTS (SELECT * FROM original_prices WHERE post_id=new.post_id);
   END//
DELIMITER ;



这可行,但对于每个 _price 和 _regular_price,它会将结果复制 18 次。我尝试将 更改FROM wp_postmetaFROM inserted,但这使得通过 plguin 导入新产品时不会向 original_prices 添加任何条目。我也尝试将其更改为SELECT now(),post_id,meta_key,meta_valueSELECT now(),NEW.post_id,NEW.meta_key,NEW.meta_value但这也没有解决重复的问题。

我在哪里错了这么多次重复结果?

标签: mysqltriggers

解决方案


如果您只想在 'meta_key is _price' 或 '_regular_price' 时插入 riow

所以你做这样的事情

DELIMITER //
CREATE TRIGGER `new_import_INSERT` AFTER INSERT ON `wp_postmeta`
 FOR EACH ROW BEGIN
     IF (NEW.meta_key  = '_price' OR NEW.meta_key = '_regular_price') THEN
        INSERT INTO original_prices (date_added,post_id,meta_key,meta_starting_price) VALUES
           (now(),NEW.post_id,NEW.meta_key,NEW.meta_value );
    END IF;
   END//
DELIMITER ;

推荐阅读