Как сопоставить результаты SQL из двух списков и вставить новую строку для каждого найденного совпадения?

0

Для тех, кто знаком с Magento, я пытаюсь написать запрос для создания новых записей catalog_product_link таблице catalog_product_link, но с некоторыми уникальными критериями. Мои знания MySQL (или любого SQL) в лучшем случае являются базовыми.

У меня есть два типа продуктов в таблице, которые я могу однозначно идентифицировать, объединив несколько других таблиц. Я могу получить уникальный список двух типов результатов продукта, например:

SELECT cpev.entity_id AS product_id, cpev.value AS name
FROM catalog_product_entity_varchar AS cpev

INNER JOIN catalog_product_entity AS cpe
ON cpe.entity_id = cpev.entity_id

INNER JOIN eav_attribute AS ea
ON ea.attribute_id = cpev.attribute_id

INNER JOIN catalog_category_product AS cat
ON cat.product_id = cpev.entity_id

WHERE cat.category_id IN ( 41 )
AND ea.attribute_code = 'name'

GROUP BY product_id
ORDER BY product_id;

... где два списка результатов основаны на изменении WHERE cat.category_id IN ( 41 ).

То, что я пытаюсь сделать, это совместить одну строку из первого списка результатов с одной или несколькими строками из второго списка на основе имени. Полное имя из первого списка будет соответствовать первой части имени из второго списка плюс некоторый текст; например:

  • list1, имя: Afinia L801
  • list2, имя: Afinia L801 Контракт на обслуживание на месте

Для каждого совпадения мне нужно вставить новую строку в другую таблицу, например:

INSERT INTO catalog_product_link (product_id, linked_product_id, link_type_id)
SELECT @idFromList1 AS product_id, @idFromList2 as linked_product_id, 4 as link_type_id
...

Я не уверен, что это то, что может быть выполнено только с помощью SQL, или если это случай, когда мне нужно написать (например) скрипт PHP, чтобы вытащить два списка из db, сопоставить их, а затем вставьте результаты. Но я все еще изучаю SQL, поэтому я стараюсь лучше понять, что я могу сделать только с запросом MySQL.

Теги:
magento
magento-1.9

1 ответ

0

Вы можете выбрать одну и ту же таблицу дважды.

SELECT cpev.entity_id AS product_id, cpev.value AS name
FROM catalog_product_entity_varchar AS cpev
INNER JOIN catalog_product_entity AS cpe
ON cpe.entity_id = cpev.entity_id
INNER JOIN eav_attribute AS ea
ON ea.attribute_id = cpev.attribute_id
INNER JOIN catalog_category_product AS cat
ON cat.product_id = cpev.entity_id
INNER JOIN catalog_category_product AS cat2
ON cat2.product_id = cpev.entity_id
WHERE cat.category_id IN ( 41 )
AND cat2.category_id IN ( 42 )
AND ea.attribute_code = 'name'
GROUP BY product_id
ORDER BY product_id;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню