我有一个名为“wp_postmeta”的wordpress数据库表
看起来像这样(简化)
meta_id post_id meta_key meta_value
1 5 _price -
2 5 _visibility -
3 5 _stock -
4 5 _stock_status -
5 5 _sale_price -
6 5 _regular_price -
7 5 _sku REALSKU
我需要根据_sku的meta_value更新所有_price,_visibility,_stock,_stock_status,_sale_price,_regular_price
我尝试了这个,但无法为更新添加其他meta_values,所以它只根据sku更新_price:
UPDATE wp_postmeta a
JOIN wp_postmeta b ON a.post_id = b.post_id
AND b.meta_key = '_sku'
AND b.meta_value LIKE 'RELASKU'
SET a.meta_value = '5'
WHERE a.meta_key = '_price'
请帮忙!
答案 0 :(得分:1)
您可以使用case
:
UPDATE wp_postmeta a JOIN
wp_postmeta b
ON a.post_id = b.post_id AND
b.meta_key = '_sku' AND
b.meta_value LIKE 'RELASKU'
SET a.meta_value = (CASE WHEN a.meta_key = '_price' THEN '5'
WHEN a.meta_key = '_visibility' . . .
ELSE a.meta_value
END)
WHERE a.meta_key IN ('_price', '_visibility', . . . );
答案 1 :(得分:1)
我相信你可以通过CASE语句达到你所需要的,例如:
SET a.meta_value = CASE a.meta_key
WHEN '_price' THEN '5'
WHEN '_visibility' THEN '6'
ELSE a.meta_value
END
答案 2 :(得分:1)
我已经为您撰写了查询。我希望它能解决你的问题:
<强>查询强>
UPDATE wp_postmeta a
JOIN
wp_postmeta b ON a.post_id = b.post_id
AND b.meta_key = '_sku'
AND b.meta_value LIKE 'RELASKU'
SET
a.meta_value =
IFNULL(( CASE
WHEN a.meta_key = '_price' THEN '13.5'
WHEN a.meta_key = '_visibility' THEN 'None'
WHEN a.meta_key = '_stock' THEN '12'
WHEN a.meta_key = '_stock_status' THEN 'Available'
WHEN a.meta_key = '_sale_price' THEN '12.5'
WHEN a.meta_key = '_regular_price' THEN '13.0'
END),a.meta_value);