【问题标题】:MYSQL: Update Database row Using SELECT and multiple JOINSMYSQL:使用 SELECT 和多个 JOINS 更新数据库行
【发布时间】:2020-04-21 06:54:01
【问题描述】:

基本上,我正在尝试为客户修复损坏的 WooCommerce 数据库。

我有一个表 wp_woocommerce_order_itemmeta 并且所有 _product_id 值都被删除了。我可以使用这个 select 语句获得正确的 ID。它将返回所有 ID,根据需要每行一个。

SELECT
  wp_wc_order_product_lookup.product_id
FROM
  wp_woocommerce_order_items
INNER JOIN
  wp_woocommerce_order_itemmeta
    ON 
      wp_woocommerce_order_itemmeta.order_item_id = wp_woocommerce_order_items.order_item_id
INNER JOIN
  wp_wc_order_product_lookup
    ON
      wp_wc_order_product_lookup.order_id = wp_woocommerce_order_items.order_id
WHERE
  wp_woocommerce_order_itemmeta.meta_key = '_product_id'

现在,当我尝试编写更新语句时,我无法让它工作。我已经尝试了几种不同的方法。我在某处读到 SET 必须移过 INNER JOIN 行。

UPDATE
  wp_woocommerce_order_itemmeta
INNER JOIN 
  wp_woocommerce_order_itemmeta
    ON 
      wp_woocommerce_order_itemmeta.order_item_id = wp_woocommerce_order_items.order_item_id
INNER JOIN
  wp_wc_order_product_lookup
    ON
      wp_wc_order_product_lookup.order_id = wp_woocommerce_order_items.order_id
SET
  wp_woocommerce_order_itemmeta.meta_value = wp_wc_order_product_lookup.order_id
WHERE
  wp_woocommerce_order_itemmeta.meta_key = '_product_id'

该代码产生以下错误[Err] 1066 - Not unique table/alias: 'wp_woocommerce_order_itemmeta'

wp_woocommerce_order_itemmeta

wp_wc_order_product_lookup

【问题讨论】:

  • 是的,是时候掌握表格/列别名了
  • 虽然在这种情况下它只是一个明显的校对错误
  • @Strawberry 你能详细说明一下吗?我不确定你想推断什么。
  • 喝杯咖啡,重新阅读您的查询。推理将变得不言而喻。

标签: mysql wordpress woocommerce


【解决方案1】:

也许你追求的是这样的:

 UPDATE wp_woocommerce_order_itemmeta x
  JOIN wp_woocommerce_order_items y
    ON y.order_item_id = x.order_item_id
  JOIN wp_wc_order_product_lookup z
    ON z.order_id = y.order_id
   SET x.meta_value = z.order_id
 WHERE x.meta_key = '_product_id'

【讨论】:

  • 成功了!稍后我会更深入地研究它。我浪费了很多时间尝试不同的事情。我确实必须将设置值更改为 product_id。我假设您故意选择 order_id,因为我在屏幕截图中突出显示了它,但这是一个无意的突出显示。再看一遍,我确实发现我的查询有问题。感谢您的帮助。
【解决方案2】:

你可以用简单的 PHP 脚本解决这个问题,这里是逻辑 1) 从 wp_wc_order_product_lookup 中选择唯一的 product_id 和 order_id 2) 步骤 1 的结果集用于在循环的帮助下更新表 wp_woocommerce_order_itemmeta

如果在 PHP 中编写脚本时遇到任何问题,请告诉我,然后我将提供给代码。

【讨论】:

  • 我知道我可以通过 PHP 做到这一点,但我试图通过 SQL 做到这一点。我知道它必须使用 SQL 才能实现,但正如@Strawberry 所展示的那样,我只是累了并且犯了错误。
猜你喜欢
  • 1970-01-01
  • 2015-04-05
  • 2022-01-04
  • 2022-12-21
  • 1970-01-01
  • 1970-01-01
  • 2021-04-07
  • 2014-10-21
  • 1970-01-01
相关资源
最近更新 更多