Импорт Magento из базы данных с использованием SQL-запроса

Magento использует структуру EAV в своей системе баз данных. У меня есть этот запрос, который дает мне product_id и имя продукта в моем магазине magento.

SELECT e.entity_id AS product_id, var.value AS product_name FROM catalog_product_entity e, eav_attribute eav, catalog_product_entity_varchar var WHERE e.entity_type_id = eav.entity_type_id AND eav.attribute_code = 'name' AND eav.attribute_id = var.attribute_id AND var.entity_id = e.entity_id 

Мне нужна помощь в получении product_url | price | image_url | описание | производитель

Я не буду публиковать весь запрос SQL, потому что слишком сложно использовать данные из Magento вручную через базу данных, но я скажу, что вы на правильном пути. Чтобы сократить количество соединений для такого рода вещей, я извлекаю свои атрибуты из таблицы eav и использую их напрямую. Это означает, что мой запрос будет работать только на моей установке Magento, но это не было проблемой для меня.

 select attribute_code, attribute_id, backend_type from eav_attribute where entity_type_id = (select entity_type_id from eav_entity_type where entity_type_code = 'catalog_product') and attribute_code in ('name', 'url_path', 'price', 'image', 'description', 'manufacturer'); 

Урожайность:

 +----------------+--------------+--------------+ | attribute_code | attribute_id | backend_type | +----------------+--------------+--------------+ | description | 61 | text | | image | 74 | varchar | | manufacturer | 70 | int | | name | 60 | varchar | | price | 64 | decimal | | url_path | 87 | varchar | +----------------+--------------+--------------+ 

Теперь ты готов к скуке! Для каждого кода атрибута присоединитесь к бэкэнд-таблице ( catalog_product_entity_$BACKEND_TYPE ) по указанному идентификатору атрибута. Для меня это превратило бы запрос sku / name / id (ваш запрос фактически не должен объединяться с продуктами, поскольку вы используете entity_id для создания соединения …) в:

 select p.sku, p.entity_id, n.value name from catalog_product_entity p join catalog_product_entity_varchar n on n.entity_id = p.entity_id where n.attribute_id = 60; 

Продолжайте добавлять новые команды join-statement | where-clause | select-clause до тех пор, пока не получите все необходимые вам соединения.

Тем не менее, Джонатан прав, что использование инфраструктуры Magento для управления этими данными было бы намного проще, чем вручную с помощью базы данных. Если у вас нет экстремального количества продуктов, которые вам нужно загрузить сразу (обратите внимание, что есть два предположения, и вы можете работать и для уменьшения), было бы гораздо более надежным использовать фреймворк.

Надеюсь, это поможет!

Спасибо, Джо