【问题标题】:SQL Trigger After Insert is not inserting values to new table插入后的 SQL 触发器未将值插入新表
【发布时间】:2020-02-14 20:36:41
【问题描述】:

我有一个 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_postmeta 更改为 FROM inserted ,但这使得通过 plguin 导入新产品时不会向 original_prices 添加任何条目。我还尝试将SELECT now(),post_id,meta_key,meta_value 更改为SELECT now(),NEW.post_id,NEW.meta_key,NEW.meta_value,但这也没有解决重复问题。

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

【问题讨论】:

    标签: mysql triggers


    【解决方案1】:

    如果你只想在 '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 ;
    

    【讨论】:

      猜你喜欢
      • 2016-10-13
      • 1970-01-01
      • 1970-01-01
      • 2012-05-27
      • 1970-01-01
      • 2015-11-06
      • 1970-01-01
      • 1970-01-01
      • 2018-07-25
      相关资源
      最近更新 更多