MYSQL запрос проверки наличия идентификатора и копирование значений строки столбца в имена столбцов, связанных с другой таблицей - PullRequest
0 голосов
/ 11 апреля 2020

Я пытаюсь сохранить Mysql данные строки из одной таблицы базы данных и скопировать значения в новую таблицу базы данных через PhpMyAdmin, но есть проблема.

Мое отсутствие знаний является результатом того, что я обращаюсь за помощью к опытным пользователям. Скопируйте, объедините, объедините, удалите или еще что-то: D .. Я действительно не уверен, что это лучший способ решить эту проблему.

ТАБЛИЦА 1 (старая) имеет столбцы: идентификатор, идентификатор продукта, идентификатор, содержимое

  • id - он нам не нужен для этого запроса
  • post_id - (INT), который фактически связано с идентификатором в ТАБЛИЦЕ 2
  • идентификатор - (VARCHAR) различных значений строки, таких как количество, цвет, скидка, цена1, цена2 , которые повторяются поля
  • содержимое - * (LONGTEXT) содержимое

    TABLE 1

ТАБЛИЦА 2 (новая) имеет столбцы:

  • id - (INT)
  • количество - (VARCHAR)
  • цвет - (VARCHAR)
  • скидка - (VARCHAR)
  • цена1 - (VARCHAR)
  • цена2 - (VARCHAR)

Мне нужно проверить с помощью mysql запрос id в ТАБЛИЦЕ 2 существует по сравнению с post_id из ТАБЛИЦЫ 1.

Если не существует, перейдите к другой записи.

Если существует, то из столбца ТАБЛИЦА 1, называемого «идентификатор», проверьте имена / значения записей записей в таких строках, как количество, цвет, скидка, цена1, цена2, и скопируйте значения столбца содержимого в столбцы ТАБЛИЦЫ 2 (связанные имена - находится в строках идентификатора столбца ТАБЛИЦЫ 1.)

Чтобы упростить ... Проверьте идентификатор из ТАБЛИЦЫ 1. Если идентификатор подходит, используйте значение идентификатора и скопируйте значение столбца СОДЕРЖАНИЕ из ТАБЛИЦЫ 1 в связанный идентификатор и Имя столбца в ТАБЛИЦЕ 2.

TABLE 2

1 Ответ

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

Вы можете повернуть исходную таблицу EAV в подзапросе, используя условное агрегирование, а затем объединить ее с целевой таблицей для обновления. coalesce() может использоваться для обработки атрибутов Missig в ​​исходной таблице.

update table2 t2
inner join (
    select 
        post_id,
        max(case when identifier = 'quantity' then content end) quantity,
        max(case when identifier = 'color' then content end) color,
        max(case when identifier = 'discount' then content end) discount,
        max(case when identifier = 'price1' then content end) price1,
        max(case when identifier = 'price2' then content end) price2
    from table1 
    group by post_id
) t1 on t1.post_id = t2.id
set 
    t2.quantity = coalesce(t1.quantity, t2.quantity),
    t2.color    = coalesce(t1.color,    t2.color)
    t2.discount = coalesce(t1.discount, t2.discount)
    t2.price1   = coalesce(t1.price1,   t2.price1)
    t2.price2   = coalesce(t1.price2,   t2.price2)
...