Для тех, кто знаком с 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 )
.
То, что я пытаюсь сделать, это совместить одну строку из первого списка результатов с одной или несколькими строками из второго списка на основе имени. Полное имя из первого списка будет соответствовать первой части имени из второго списка плюс некоторый текст; например:
Для каждого совпадения мне нужно вставить новую строку в другую таблицу, например:
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.
Вы можете выбрать одну и ту же таблицу дважды.
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;