根据 2 个键更新 post_meta 值 - Wordpress

Posted

技术标签:

【中文标题】根据 2 个键更新 post_meta 值 - Wordpress【英文标题】:Update post_meta value based on 2 keys - Wordpress 【发布时间】:2019-02-23 15:12:07 【问题描述】:

我在 WooCommerce 中有 5000 多种产品,我正在寻找一个 SQL 查询来根据他们的 SKU 设置他们的条形码。 “条形码”和“sku”都是自定义帖子元。基本上是这样的:

UPDATE wp_postmeta SET barcode='x' WHERE sku='y';

但它不起作用,因为条形码和 sku 不是真正的表格列。那么,任何人都可以提供一个有效的查询吗?我是 SQL 新手。谢谢!

【问题讨论】:

如何设置barcode和sku?因为每个产品必须有不同的一次。 你是一次执行这些吗?显然,sku 和条形码是 wp_postmeta 中的两个单独的行,由 post_id 链接,但 mysql won't let you query the table you're updating e.g. UPDATE wp_postmeta ... WHERE post_id = (SELECT post_id FROM wp_postmeta WHERE ...。因此,您可能必须运行两个查询:一个从 meta_key='sku' 和 meta_value='y' 查找 post_id,然后一个更新 wp_postmeta,其中 meta_key='barcode' 和 post_id 是您刚刚找到的那个. @dipmala 我有一个包含所有 SKU 和条形码的 excel 文件(当然,每个产品都是唯一的)。我只是将它们复制粘贴到查询中。 【参考方案1】:

sku 和条形码将存储在由 post_id 链接的两个单独的行中。这是您在 MySQL (borrowed from this answer) 中基于同一表中的另一行更新一行时需要使用的语法:

UPDATE  wp_postmeta a
  JOIN  wp_postmeta b on b.post_id = a.post_id
  SET   a.meta_value = 'y'
  WHERE a.meta_key = 'barcode'
    AND b.meta_key = 'sku'
    AND b.meta_value = 'x';

即查询表别名 b 上的 ID,然后更新表别名 a 上的条形码。

(但我没有安装 WooCommerce 来测试这个 - 请先备份您的数据库!等等)

【讨论】:

以上是关于根据 2 个键更新 post_meta 值 - Wordpress的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 std::map 的值获取前 n 个键?

查询 post_meta 日期而不是 post_date_gmt

根据同一行的值更新行

redis 实验持续化

带有 Wordpress 帖子和 post_meta 的子查询

c++ stl::priority queue 使用 2 个键排序不正确