编写SQL查询以删除Woocommerce中的旧订单

Sti*_*nut 3 mysql sql wordpress woocommerce

我想删除Woocommerce中的一些旧订单数据,仅保留订单数据的最后12个月

这是我用来删除所有订单的SQL查询:

DELETE FROM wp_woocommerce_order_itemmeta
DELETE FROM wp_woocommerce_order_items
DELETE FROM wp_comments WHERE comment_type = 'order_note'
DELETE FROM wp_postmeta WHERE post_id IN ( SELECT ID FROM wp_posts WHERE post_type = 'shop_order' )
DELETE FROM wp_posts WHERE post_type = 'shop_order'
Run Code Online (Sandbox Code Playgroud)

在2017年1月1日之前删除所有订单数据以及从2017年1月1日开始保持KEEP订单数据我需要添加什么?

我对SQL不太了解,因为这些年来我使用了一些SQL查询。

任何帮助表示赞赏。

我很惊讶,现在还没有插件,也可以删除没有订单的客户。我怀疑我是唯一尝试保持其WP / WC数据库清洁的人。

And*_*ltz 5

这是通常的想法,首先删除子项,然后最后删除父项。 请勿未经测试就运行该软件。对于数据丢失,我不承担任何责任。

DELETE 
FROM    wp_woocommerce_order_itemmeta 
WHERE   order_item_id IN (
    SELECT  order_item_id
    FROM    wp_woocommerce_order_items
    WHERE   order_id IN (
        SELECT  ID 
        FROM    wp_posts
        WHERE   post_date < '2017-01-01'
    )
)

DELETE 
FROM    wp_woocommerce_order_items
WHERE   order_id IN (
    SELECT  ID 
    FROM    wp_posts
    WHERE   post_date <= '2017-01-01'
)

DELETE 
FROM    wp_comments 
WHERE   comment_type = 'order_note'
AND     comment_post_ID IN (
    SELECT  ID 
        FROM    wp_posts
        WHERE   post_date <= '2017-01-01'
)

DELETE 
FROM    wp_postmeta 
WHERE   post_id IN ( 
    SELECT  ID 
    FROM    wp_posts 
    WHERE   post_type = 'shop_order'
    AND     post_date <= '2017-01-01' 
)

DELETE 
FROM    wp_posts 
WHERE   post_type = 'shop_order'
AND     post_date <= '2017-01-01'
Run Code Online (Sandbox Code Playgroud)

  • 效果很好而且很快。后端有 70,000 个订单,过滤速度严重减慢。现在好多了。逐一运行并先备份。 (2认同)
  • 这也应该涵盖 commentmeta 吗?即,“从 wp_commentmeta 删除,其中 comment_id 不在(从 wp_comments 中选择 comment_id);` (2认同)