【问题标题】:Delete every 30% coupon from database in Woocommerce从 Woocommerce 的数据库中删除每 30% 的优惠券
【发布时间】:2018-09-26 14:54:20
【问题描述】:

我需要删除 woocommerce 数据库中的所有 30% 折扣优惠券。我的数据库是默认的 wordpress/woocommerce 数据库 (wp_)

我发现this thread 显示了一些在数据库中选择的方法:

SELECT p.`ID`, 
   p.`post_title`   AS coupon_code, 
   p.`post_excerpt` AS coupon_description, 
   Max(CASE WHEN pm.meta_key = 'discount_type'      AND  p.`ID` = pm.`post_id` THEN pm.`meta_value` END) AS discount_type,          -- Discount type 
   Max(CASE WHEN pm.meta_key = 'coupon_amount'      AND  p.`ID` = pm.`post_id` THEN pm.`meta_value` END) AS coupon_amount,          -- Coupon amount 
   Max(CASE WHEN pm.meta_key = 'free_shipping'      AND  p.`ID` = pm.`post_id` THEN pm.`meta_value` END) AS free_shipping,          -- Allow free shipping 
   Max(CASE WHEN pm.meta_key = 'expiry_date'        AND  p.`ID` = pm.`post_id` THEN pm.`meta_value` END) AS expiry_date,                -- Coupon expiry date 
   Max(CASE WHEN pm.meta_key = 'minimum_amount'     AND  p.`ID` = pm.`post_id` THEN pm.`meta_value` END) AS minimum_amount,         -- Minimum spend 
   Max(CASE WHEN pm.meta_key = 'maximum_amount'     AND  p.`ID` = pm.`post_id` THEN pm.`meta_value` END) AS maximum_amount,         -- Maximum spend 
   Max(CASE WHEN pm.meta_key = 'individual_use'     AND  p.`ID` = pm.`post_id` THEN pm.`meta_value` END) AS individual_use,         -- Individual use only 
   Max(CASE WHEN pm.meta_key = 'exclude_sale_items' AND  p.`ID` = pm.`post_id` THEN pm.`meta_value` END) AS exclude_sale_items,         -- Exclude sale items 
   Max(CASE WHEN pm.meta_key = 'product_ids'    AND  p.`ID` = pm.`post_id` THEN pm.`meta_value` END) AS product_ids,                -- Products 
   Max(CASE WHEN pm.meta_key = 'exclude_product_ids'AND  p.`ID` = pm.`post_id` THEN pm.`meta_value` END) AS exclude_product_ids,        -- Exclude products 
   Max(CASE WHEN pm.meta_key = 'product_categories' AND  p.`ID` = pm.`post_id` THEN pm.`meta_value` END) AS product_categories,             -- Product categories 
   Max(CASE WHEN pm.meta_key = 'exclude_product_categories' AND  p.`ID` = pm.`post_id` THEN pm.`meta_value` END) AS exclude_product_categories,-- Exclude Product categories 
   Max(CASE WHEN pm.meta_key = 'customer_email'     AND  p.`ID` = pm.`post_id` THEN pm.`meta_value` END) AS customer_email,         -- Email restrictions 
   Max(CASE WHEN pm.meta_key = 'usage_limit'    AND  p.`ID` = pm.`post_id` THEN pm.`meta_value` END) AS usage_limit,                -- Usage limit per coupon 
   Max(CASE WHEN pm.meta_key = 'usage_limit_per_user'   AND  p.`ID` = pm.`post_id` THEN pm.`meta_value` END) AS usage_limit_per_user,   -- Usage limit per user 
   Max(CASE WHEN pm.meta_key = 'usage_count'    AND  p.`ID` = pm.`post_id` THEN pm.`meta_value` END) AS total_usaged                   -- Usage count 
FROM   `wp_posts` AS p 
   INNER JOIN `wp_postmeta` AS pm ON  p.`ID` = pm.`post_id` 
WHERE  p.`post_type` = 'shop_coupon' 
   AND p.`post_status` = 'publish' 
GROUP  BY p.`ID` 
ORDER  BY p.`ID` ASC;

但我还不能删除所有 30% 的折扣券。

我的数据库中有 16k 优惠券,我无法从 wp-admin 手动执行。

【问题讨论】:

  • 到目前为止你尝试过什么? SO 不是一个您只要求其他人解决您的问题而不展示您自己尝试过的任何工作的地方。
  • 我显示了我找到的链接,我在那个链接上尝试了很多组合但没有成功,如果你能提供帮助,我会很高兴和感激!
  • 在 SO 上发布链接作为示例是不好的形式。 “如果可以创建一个您可以链接到的问题的实时示例(例如,在sqlfiddle.comjsbin.com),那么就这样做 - 但也要在您的问题本身中包含代码。不是每个人都可以访问外部网站,并且链接可能会随着时间的推移而中断。”
  • 对,我的错,我修好了!你能把那个-1去掉吗?

标签: php mysql sql wordpress woocommerce


【解决方案1】:

更新 2 - 从 phpMyAdmin 尝试以下 SQL 查询(之前总是进行备份):

DELETE a, b
FROM wp_posts AS a
JOIN wp_postmeta AS b
JOIN wp_postmeta AS c
WHERE b.post_id = a.ID AND c.post_id = a.ID
AND a.post_type = 'shop_coupon'
AND b.meta_key = 'discount_type' AND b.meta_value = 'percent'
AND c.meta_key = 'coupon_amount' AND c.meta_value = '30'

经过测试并且有效。

此查询将从 wp_postswp_postmeta 表中删除所有优惠券数据,以获取 30% 折扣的优惠券


或者您可以运行一次以下 php 代码,该代码将为您提供已删除优惠券的数量:

global $wpdb;
$result = $wpdb->query( "
    DELETE a, b
    FROM wp_posts AS a
    JOIN wp_postmeta AS b
    JOIN wp_postmeta AS c
    WHERE b.post_id = a.ID AND c.post_id = a.ID
    AND a.post_type = 'shop_coupon'
    AND b.meta_key = 'discount_type' AND b.meta_value = 'percent'
    AND c.meta_key = 'coupon_amount' AND c.meta_value = '30'
" );

echo '<p>Coupons deleted: ' . $result / 2  . '</p>';

经过测试并且有效。

【讨论】:

  • 我尝试用 SELECT 来测试它,显示这个错误:在分析过程中发现了 1.1 错误。预期一个表达式。 (靠近位置 7 的“FROM”) SQL 查询:文档 SELECT FROM wp_post AS a, wp_postmeta AS b WHERE a.ID = b.post_id AND a.post_type = 'shop_coupon' AND b.discount_type = 'percent' AND b.coupon_amount = '30' MySQL 消息:文档 #1064 - 您的 SQL 中的“FROM wp_post AS a, wp_postmeta AS b WHERE a.ID = b.post_id AND a.post_type = 'on line 1旁边有语法错误” >
  • # 1054 - “字段列表”中的未知“a”列
  • @AdrianoVarlotta 我刚刚进行了更新......它已经过测试并且运行良好......
猜你喜欢
  • 1970-01-01
  • 2020-03-20
  • 1970-01-01
  • 2018-02-22
  • 1970-01-01
  • 1970-01-01
  • 2017-12-12
  • 2017-08-16
  • 1970-01-01
相关资源
最近更新 更多