Jeg har ikke tænkt mig at sende hele SQL-forespørgslen, fordi det er alt for kedeligt at forsøge at få data ud af Magento manuelt via databasen, men jeg vil sige, at du er på rette vej. For at skære ned på antallet af joinforbindelser til denne slags ting, henter jeg mine attribute_ids fra eav-tabellen og bruger dem direkte. Det betyder, at min forespørgsel kun vil virke på min installation af Magento, men det har ikke været et problem for mig.
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');
Udbytter:
+----------------+--------------+--------------+
| 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 |
+----------------+--------------+--------------+
Nu er du klar til træthed! For hver attributkode skal du slutte dig til backend-tabellen (catalog_product_entity_$BACKEND_TYPE
) på dit angivne attribut-id. For mig ville dette forvandle en sku/navn/id-forespørgsel (din forespørgsel behøver faktisk ikke at slutte sig til produkter, da du bruger entity_id til at lave joinforbindelsen...) til:
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;
Fortsæt med at tilføje nye join-statement|where-clause|select-clause-sæt, indtil du har alle de joinforbindelser, du oprindeligt ønskede.
Når det er sagt, har Jonathan ret i, at det ville være langt nemmere at bruge Magento-rammeværket til at administrere disse data end at gøre det manuelt via databasen. Medmindre du har et ekstremt antal produkter, som du skal indlæse på én gang (bemærk, at der er to antagelser der, og du kan arbejde på at reducere begge dele), ville det være langt mere robust at bruge rammen.
Håber det hjælper!
Tak, Joe