2011-03-16 4 views
2

Magento utilise la structure EAV dans son système de base de données. J'ai cette requête qui me donne product_id et le nom des produits dans mon magasin magento.Les produits Magento importent de la base de données à l'aide de la requête SQL

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 

J'ai besoin d'aide pour obtenir Product_URL | prix | image_url | Description | fabricant

+2

pourquoi vous essayez de le faire dans SQL, il serait plus facile en utilisant muchhhhh collections Magento ... –

+0

Serait-ce bon pour les produits de masse de téléchargement en vrac? –

Répondre

1

Je ne vais pas poster toute requête SQL, car il est beaucoup trop fastidieux d'essayer d'obtenir des données sur Magento manuellement 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 attributs_attributs 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  | 
+----------------+--------------+--------------+ 

Maintenant vous êtes prêt pour l'ennui! Pour chaque code d'attribut, joignez-vous à la table de backend (catalog_product_entity_$BACKEND_TYPE) sur votre identifiant d'attribut donné. Pour moi, cela tournerait un sku/nom/id requête (votre requête n'a pas réellement besoin de se joindre contre les produits, puisque vous utilisez le entity_id pour faire la jonction ...) dans:

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; 

continuer à ajouter new joint-statement | where-clause | select-clause définit jusqu'à ce que vous ayez toutes les jointures voulues à l'origine. Cela dit, Jonathan a raison de dire que l'utilisation du framework Magento pour gérer ces données serait beaucoup plus simple que de le faire manuellement via la base de données. À moins d'avoir un nombre extrême de produits que vous devez charger en même temps (notez qu'il y a deux hypothèses là-bas, et vous pouvez travailler à réduire l'un ou l'autre), il serait beaucoup plus robuste d'utiliser le framework.

Espérons que ça aide!

Merci, Joe

+0

Merci beaucoup, Joe. Cela m'a vraiment aidé. C'est vrai que cela fonctionnera en fonction de la version de Magento installée. Je vais terminer avec le reste de la requête et l'afficher ici. – karto

+0

avez-vous terminé le reste de la requête? postez-le! – binnyb

+1

OMG .... jamais vu une telle structure de base de données. Merci pour votre aide Joseph – cljk

Questions connexes