我有一个 WooCommerce 商店,我希望运行一个 MySQL 查询来删除特定公司的所有 wp_posts(订单),它包含在 wp_postmeta 表的 meta_key/meta_value 对中。
到目前为止我做了什么
我读过这篇文章:Mysql delete all posts that have a given meta_key这非常有用,我写了这段代码:
delete a,b,c,d,e,f,g,h,i /* This bit tells us what to delete*/
FROM wp2_posts a
LEFT JOIN wp2_term_relationships b ON ( a.ID = b.object_id )
LEFT JOIN wp2_postmeta c ON ( a.ID = c.post_id )
LEFT JOIN wp2_term_taxonomy d ON ( d.term_taxonomy_id = b.term_taxonomy_id )
LEFT JOIN wp2_terms e ON ( e.term_id = d.term_id )
LEFT JOIN wp2_woocommerce_order_items f ON ( a.ID = f.order_id )
LEFT JOIN wp2_woocommerce_order_itemmeta g ON ( f.order_item_id = g.order_item_id )
LEFT JOIN wp2_comments h ON ( a.ID = h.comment_post_ID )
LEFT JOIN wp2_commentmeta i ON ( h.comment_ID = i.comment_id )
WHERE a.ID IN /* This provides the args for deletion*/
( SELECT post_id
FROM wp2_postmeta
WHERE meta_key LIKE '_shipping_company'
AND meta_value LIKE 'Acme Corp'
)
我挣扎的地方
但是当我尝试在 SQL pro 中运行查询时得到的响应是“您无法在 FROM 子句中指定目标表‘c’进行更新”。
我假设它是在说我不能删除我用作参数的东西。
任何想法都非常感谢,劳拉。
最佳答案
MySQL 不允许您同时修改和从同一个表中选择。在这种情况下,您正在对 wp2_postmeta
表运行 DELETE
和 SELECT
。
有很多方法可以解决这个问题(例如参见 MySQL Error 1093 - Can't specify target table for update in FROM clause )但是在这种情况下,您不需要 WHERE
子句中的子查询,因为您可以检查
和 wp2_postmeta
表的 meta_keymeta_value
列直接。删除子查询中的 SELECT
语句可解决问题:
DELETE c,a,b,d,e,f,g,h,i
FROM wp2_postmeta c
JOIN wp2_posts a ON ( a.ID = c.post_id )
LEFT JOIN wp2_term_relationships b ON ( a.ID = b.object_id )
LEFT JOIN wp2_term_taxonomy d ON ( d.term_taxonomy_id = b.term_taxonomy_id )
LEFT JOIN wp2_terms e ON ( e.term_id = d.term_id )
LEFT JOIN wp2_woocommerce_order_items f ON ( a.ID = f.order_id )
LEFT JOIN wp2_woocommerce_order_itemmeta g ON ( f.order_item_id = g.order_item_id )
LEFT JOIN wp2_comments h ON ( a.ID = h.comment_post_ID )
LEFT JOIN wp2_commentmeta i ON ( h.comment_ID = i.comment_id )
WHERE c.meta_key LIKE '_shipping_company'
AND c.meta_value LIKE 'Acme Corp'
原始查询的变化:
- 首先从
wp2_postmeta
开始 - 加入
wp2_posts
第二个 - 直接在
WHERE
子句中按meta_key
和meta_value
过滤
关于php - 从 wp_posts 表(以及所有关联表)中删除 wp_postmeta 中的 meta_value 与特定值匹配的所有帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48380877/