Импорт продуктов Magento из базы данных с использованием SQL-запроса - PullRequest
2 голосов
/ 16 марта 2011

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 | цена | image_url | описание | производитель

1 Ответ

1 голос
/ 16 марта 2011

Я не собираюсь публиковать весь SQL-запрос, потому что слишком утомительно пытаться вытащить данные из Magento вручную через базу данных, но я скажу, что вы на правильном пути.Чтобы сократить количество объединений для такого рода вещей, я извлекаю свои attribute_ids из таблицы 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 для управления этими данными будет гораздо прощечем делать это вручную через базу данных.Если у вас нет огромного количества продуктов, которые вам нужно загрузить сразу (обратите внимание, что там есть два предположения, и вы можете работать над сокращением любого из них), было бы гораздо надежнее использовать среду.

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

Спасибо, Джо

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