我有大约 10 种产品,每种产品有近 200 种变化。我需要更新特定产品的销售价格,包括其所有变体。
问题是:
所有变体都有不同的价格。 尚未输入销售价格 - 所有销售价格输入框均为空。
我需要一个 SQL 解决方案来运行和更新特定产品的所有销售价格,方法是采用常规价格并从中扣除 350,或者
现阶段我不知道的任何其他方式,因为我已经尝试了许多解决方案,包括 Woocommerce 内置解决方案“设置销售价格”,这又不起作用,因为价格不一样。
SELECT * FROM `wp_postmeta` WHERE post_id = "1097"
UPDATE `meta_id` = (SELECT * FROM `wp_postmeta` WHERE `meta_value` = _regular_price) - 350 WHERE `meta_key` = _sale_price
Stackoverflow 上的研究表明,编辑后的查询表明 wp_postmeta 表保存产品值,wp_posts 表保存产品 ID。
这是我面临的问题的屏幕截图:
你会看到meta_id不同而post_id相同,这是因为在WordPress中post_id是产品,在这种情况下它有很多变体,而meta_id是我需要为每个变体更新的_sale_price部分
我希望这是有道理的!
试试这个 (其中行
AND p.ID = 19
==> 19 是您的可变产品 ID):
UPDATE wp_postmeta as pm
JOIN wp_postmeta as pm2 ON pm.post_id = pm2.post_id
SET pm.meta_value = ( pm2.meta_value - 350 )
WHERE pm.meta_key LIKE '_sale_price'
AND pm2.meta_key LIKE '_regular_price'
AND pm.post_id IN
( SELECT p2.ID
FROM wp_posts AS p
JOIN wp_posts AS p2 ON p2.post_parent = p.ID
WHERE p.post_type = 'product'
AND p.post_status = 'publish'
AND p.ID = 19
AND p2.post_type = 'product_variation'
AND p2.post_status = 'publish' );
经过测试并且可以工作(之前一定要做好备份)
因此,在这个针对已定义变量产品 ID 的 SQL 查询中,它将用常规价格减去 350 来替换所有产品变体的销售价格……
如您所见,它有效......没有错误
基于@LoicTheAztec,我将其扩展为通过meta_value限制变化:
## Get all Variation ID for parent 3859 which have meta_value like %bound-soft%
SET @ids = (SELECT GROUP_CONCAT(p2.ID)
FROM wp_posts AS p
JOIN wp_posts AS p2 ON p2.post_parent = p.ID
INNER JOIN wp_postmeta pm2 ON pm2.post_id = p2.ID
WHERE p.post_type = 'product'
AND p.post_status = 'publish'
AND p.ID = 3859
AND p2.post_type = 'product_variation'
AND p2.post_status = 'publish'
AND pm2.meta_value LIKE '%bound-soft%');
## Set price to 10 based on variation ids
UPDATE wp_postmeta as pm
SET pm.meta_value = '10'
WHERE FIND_IN_SET(pm.post_id, @ids)
AND pm.meta_key = '_price';
## Price can be '_price' or '_regular_price' or '_sale_price'
## See results of @ids
SELECT @ids