Няма да публикувам цялата SQL заявка, защото е твърде досадно да се опитвате да извадите данни от Magento ръчно чрез базата данни, но ще кажа, че сте на прав път. За да намаля броя на присъединяванията за този вид неща, извличам моите attribute_ids от таблицата eav и ги използвам директно. Това означава, че моята заявка ще работи само на my инсталиране на Magento, но това не е проблем за мен.
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');
Добив:
+----------------+--------------+--------------+
| 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 |
+----------------+--------------+--------------+
Сега сте готови за досада! За всеки код на атрибут се присъединете към задната таблица (catalog_product_entity_$BACKEND_TYPE
) на дадения ви идентификатор на атрибут. За мен това би превърнало заявка sku/name/id (вашата заявка всъщност не трябва да се присъединява към продукти, тъй като използвате entity_id, за да направите присъединяването...) в:
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;
Продължете да добавяте нов инструкция за присъединяване|where-clause|select-clause, докато не получите всички съединения, които първоначално сте искали.
Въпреки това Джонатан е прав, че използването на рамката на Magento за управление на тези данни би било много по-лесно, отколкото ръчно чрез базата данни. Освен ако нямате огромен брой продукти, които трябва да заредите наведнъж (обърнете внимание, че има две предположения и можете да работите за намаляването на едното), би било много по-стабилно да използвате рамката.
Надявам се това да помогне!
Благодаря, Джо