mysql - 插入后的 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_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
但这也没有解决重复的问题。
我在哪里错了这么多次重复结果?
解决方案
如果您只想在 '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 ;
推荐阅读
- javascript - 不正确的响应 mime 类型(预期的 'application/wasm)PSPDFKIT 和保留的大小不足以包含签名问题 oracle apex?
- laravel - 调用未定义的函数 App\Http\Controllers\Datatables()
- c++ - std::strftime 在 windows 中使用 gmtime 将时区 UTC 显示为 UTC+1
- sql - 如何按商店,按项目的类别查询一年中每一天的总收入组?
- c++ - 具有条件类型名的模板类
- javascript - 删除 JavaScript 中创建的函数
- search - 谷歌表 - 搜索并作为列表并将其粘贴到下一个空行
- node.js - 关闭 SSH 终端后如何维护 NodeJS 服务器应用程序
- javascript - 在 JS 中制作一个通用函数来获取价值
- vuejs2 - vuetify 上的导航抽屉自定义