Magento产品使用SQL查询从数据库导入

时间:2011-03-16 09:15:20

标签: php mysql magento

Magento在其数据库系统中使用EAV结构。我有这个查询,它在我的magento商店中提供了product_id和产品名称。

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

我需要帮助才能获得product_url | price | image_url | description | manufacturer

1 个答案:

答案 0 :(得分:1)

我不打算发布整个SQL查询,因为尝试通过数据库手动从Magento中获取数据太乏味了,但我会说你走在正确的轨道上。为了减少这种事情的连接数,我从eav表中检索我的attribute_ids并直接使用它们。这意味着我的查询只适用于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      |
+----------------+--------------+--------------+

现在你已经准备好单调乏味了!对于每个属性代码,请根据给定属性ID连接后端表(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;

继续添加新的join-statement | where-clause | select-clause设置,直到您拥有最初想要的所有连接。

也就是说,Jonathan使用Magento框架来管理这些数据要比通过数据库手动操作要容易得多。除非你有一个极端数量的产品需要一次加载(注意那里有两个假设,你可以努力减少),使用框架会更加健壮。

希望有所帮助!

谢谢, 乔