MYSQL: обновить строку базы данных, используя SELECT и несколько JOINS - PullRequest
0 голосов
/ 21 апреля 2020

По сути, я пытаюсь восстановить поврежденную базу данных WooCommerce для клиента.

У меня есть таблица wp_woocommerce_order_itemmeta, и все значения _product_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

imagewp_woocommerce_order_itemmeta">

wp_wc_order_product_lookup

imagewp_wc_order_product_lookup">

Ответы [ 2 ]

2 голосов
/ 21 апреля 2020

Возможно, вы ищете что-то вроде этого:

 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'
0 голосов
/ 21 апреля 2020

вы можете решить эту проблему с помощью простого PHP скрипта, вот логика 1) выберите уникальный product_id и order_id из wp_wc_order_product_lookup 2) Набор результатов из шага 1 используется для обновления таблицы wp_woocommerce_order_itemmeta с помощью циклического

Дайте мне знать, если у вас возникнут проблемы с написанием скрипта на PHP, тогда я предоставлю код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...