Nie zamierzam publikować całego zapytania SQL, ponieważ ręczne pobieranie danych z Magento za pośrednictwem bazy danych jest zbyt żmudne, ale powiem, że jesteś na dobrej drodze. Aby zmniejszyć liczbę łączeń dla tego rodzaju rzeczy, pobieram moje atrybuty atrybutów z tabeli eav i używam ich bezpośrednio. Oznacza to, że moje zapytanie będzie działać tylko na moim zainstalować Magento, ale nie stanowiło to dla mnie problemu.
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');
Plony:
+----------------+--------------+--------------+
| 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 |
+----------------+--------------+--------------+
Teraz jesteś gotowy na nudę! Dla każdego kodu atrybutu dołącz do tabeli zaplecza (catalog_product_entity_$BACKEND_TYPE
) na podanym identyfikatorze atrybutu. Dla mnie zamieniłoby to zapytanie sku/name/id (Twoje zapytanie w rzeczywistości nie musi łączyć się z produktami, ponieważ używasz elementu entity_id do łączenia...) w:
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;
Kontynuuj dodawanie nowych zestawów join-statement|where-clause|select-clause, aż uzyskasz wszystkie połączenia, które chciałeś pierwotnie.
To powiedziawszy, Jonathan ma rację, że użycie frameworka Magento do zarządzania tymi danymi byłoby znacznie łatwiejsze niż robienie tego ręcznie za pośrednictwem bazy danych. O ile nie masz ekstremalnej liczby produktów, które musisz załadować wszystkie naraz (pamiętaj, że istnieją dwa założenia i możesz pracować nad ich zmniejszeniem), znacznie bardziej niezawodne byłoby użycie frameworka.
Mam nadzieję, że to pomoże!
Dzięki, Joe