【问题标题】:Write an SQL query to remove old orders in Woocommerce编写 SQL 查询以删除 Woocommerce 中的旧订单
【发布时间】:2018-08-17 16:20:51
【问题描述】:

我想删除 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'

我需要添加什么来删除 2017 年 1 月 1 日之前的所有订单数据并保留自 2017 年 1 月 1 日以来的订单数据?

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

感谢任何帮助。

我很惊讶目前还没有一个插件来解决这个问题,也可以删除没有订单的客户。我怀疑我是唯一一个试图保持他们的 WP/WC 数据库干净的人。

【问题讨论】:

    标签: mysql sql wordpress woocommerce


    【解决方案1】:

    这是一般的想法,你先删除子项,然后再删除父项。 不要在没有先测试的情况下运行它。我对丢失的数据不承担任何责任。

    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'
    

    【讨论】:

    • 非常感谢,它确实有效,而且工作得更快,而不是在管理面板中手动清理。
    • 告诉我,我的网站在尝试通过前端执行此操作时总是会超时。为您节省数小时的挫败感!
    • 效果很好,速度也很快。后端有 7 万个订单,过滤它们的速度严重放缓。现在好多了。一个一个运行,先备份。
    • 这也应该包括commentmeta吗?即DELETE FROM wp_commentmeta WHERE comment_id NOT IN ( SELECT comment_id FROM wp_comments );
    • @BlueDogRanch 是的,应该,随时修改代码并将其添加:)
    【解决方案2】:

    如果在这些表中实现了外键,那么只有当您能够从父表中删除数据时,您才必须首先从子表中删除数据。

    SQL 查询如下:

    DELETE FROM wp_woocommerce_order_itemmeta
    where Date(OrderDate Column) < '2017-01-01';
    
    DELETE FROM wp_posts
    WHERE post_type = 'shop_order' 
    and Date(OrderDate Column) < '2017-01-01';
    

    【讨论】:

      猜你喜欢
      • 2014-09-14
      • 1970-01-01
      • 2019-12-20
      • 1970-01-01
      • 2022-11-01
      • 1970-01-01
      • 2018-08-25
      • 2016-07-31
      • 1970-01-01
      相关资源
      最近更新 更多