Mysql
 sql >> Base de données >  >> RDS >> Mysql

Importation de produits Magento à partir d'une base de données à l'aide d'une requête SQL

Je ne vais pas publier l'intégralité de la requête SQL car il est beaucoup trop fastidieux d'essayer d'extraire manuellement des données de Magento via la base de données, mais je dirai que vous êtes sur la bonne voie. Pour réduire le nombre de jointures pour ce genre de chose, je récupère mes attribut_ids de la table eav et les utilise directement. Cela signifie que ma requête ne fonctionnera que sur mon installation de Magento, mais cela n'a pas été un problème pour moi.

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');

Rendement :

+----------------+--------------+--------------+
| 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      |
+----------------+--------------+--------------+

Vous êtes maintenant prêt pour l'ennui ! Pour chaque code d'attribut, joignez-vous à la table principale (catalog_product_entity_$BACKEND_TYPE ) sur votre ID d'attribut donné. Pour moi, cela transformerait une requête sku/name/id (votre requête n'a en fait pas besoin de se joindre aux produits, puisque vous utilisez l'entity_id pour faire la jointure...) en :

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;

Continuez à ajouter de nouveaux ensembles join-statement|where-clause|select-clause jusqu'à ce que vous ayez toutes les jointures que vous vouliez à l'origine.

Cela dit, Jonathan a raison de dire qu'utiliser le framework Magento pour gérer ces données serait beaucoup plus facile que de le faire manuellement via la base de données. À moins que vous n'ayez un nombre extrême de produits que vous devez charger tous en même temps (notez qu'il y a deux hypothèses ici, et vous pouvez travailler pour réduire l'une ou l'autre), il serait beaucoup plus robuste d'utiliser le framework.

J'espère que ça aide !

Merci, Joe