MYSQL Запрос на генерирование умножения существующего значения в таблице - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь выполнить запрос mysql, чтобы обновить таблицу с некоторыми значениями в порядке идентификатора. У меня был успех в первый раз (сгенерировать 38 строк результата), но когда я выполню это снова, это умножит существующее значение в таблице (38x38 = 1444 строки результата) повторение уже существующего product_id в новых строках ID .....

я хочу вставить в эту таблицу только уникальный product_id из другой целевой таблицы и сгруппировать по ID [1,2,3,4,5, и не повторяйте это тоже]

код:

/* add all eligible customers to temporary table */
INSERT INTO `temp_wp_woocommerce_subscription_downloads`
(`product_id`, `subscription_id`)

  SELECT posts.ID AS product_id, downn.subscription_id AS subscription_id
  FROM wp_posts posts
  JOIN wp_woocommerce_subscription_downloads downn
  WHERE posts.post_type = 'product'
    AND posts.post_status = 'publish'
;

в печати вы можете увидеть сгенерированный вопрос:

(https://prntscr.com/s2zhil)

РЕДАКТИРОВАТЬ: отлично работать с кодом из ответа @GordonLinoff, но после запуска и добавления нового продукта и повторного выполнения запроса ID не по порядку (кажется, что "прыгать / записать некоторые идентификаторы", как я могу заказать по уникальным идентификаторам? и как вы можете видеть: http://prntscr.com/s31rrq

1 Ответ

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

Это относится к исходной версии вопроса.

Вы можете добавить уникальный индекс для productid и затем использовать on duplicate key.

alter table temp_wp_woocommerce_subscription_downloads
    add constraint unq_temp_wp_woocommerce_subscription_downloads_product_id
        unique(product_id);

INSERT INTO temp_wp_woocommerce_subscription_downloads(`product_id`, `subscription_id`)

    SELECT p.ID AS product_id, d.subscription_id AS subscription_id
    FROM wp_posts posts p JOIN
         wp_woocommerce_subscription_downloads d
         ON p.post_type = 'product' AND p.post_status = 'publish'
    ON DUPLICATE KEY UPDATE subscription_id = d.subscription_id;

Тем не менее, я подозреваю, что Вы также можете пропустить условие JOIN на столе - скажем, по почте или продукту.

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