Ik ga niet de hele SQL-query posten omdat het veel te vervelend is om handmatig gegevens uit Magento te halen via de database, maar ik zal zeggen dat je op de goede weg bent. Om het aantal joins voor dit soort dingen te verminderen, haal ik mijn attribute_ids op uit de eav-tabel en gebruik ze direct. Dit betekent dat mijn zoekopdracht alleen werkt op mijn installatie van Magento, maar dat was voor mij geen probleem.
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');
Opbrengsten:
+----------------+--------------+--------------+
| 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 ben je klaar voor verveling! Voeg voor elke kenmerkcode samen met de backend-tabel (catalog_product_entity_$BACKEND_TYPE
) op uw opgegeven attribuut-ID. Voor mij zou dit een sku/naam/id-query (je query hoeft eigenlijk niet samen te gaan met producten, aangezien je de entiteit_id gebruikt om de join te maken...) veranderen in:
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;
Ga door met het toevoegen van nieuwe join-statement|where-clause|select-clause sets totdat je alle joins hebt die je oorspronkelijk wilde.
Dat gezegd hebbende, heeft Jonathan gelijk dat het gebruik van het Magento-framework om deze gegevens te beheren veel gemakkelijker zou zijn dan dit handmatig via de database te doen. Tenzij je een extreem aantal producten hebt dat je allemaal tegelijk moet laden (merk op dat er twee aannames zijn, en je kunt werken om beide te verminderen), zou het veel robuuster zijn om het raamwerk te gebruiken.
Ik hoop dat dat helpt!
Bedankt, Joe