使用 SQL 列出 Magento 中某个类别中的有效产品
List active products in a category in Magento with SQL
我正在使用 Magento 数据库创建报告,但我无法让它与我合作。
我需要列出商店的类别以及每个类别中有多少活跃产品。
即:
手袋 (5)
鞋子 (12)
铅笔 (6)
等等
到目前为止我发现的是:
catalog_category_flat_store_9 列出商店的类别以及类别 ID
类别 ID 可用于 catalog_category_product
以获取产品 ID
可以在 catalog_product_entity
中使用产品 ID 来获取 sku(并过滤掉配置的产品)
可以在 catalog_product_flat_9
中使用 sku 来获取实体 ID(这是迟钝的 - 他们应该只包括类别,如果它在那里是活动的)
实体 ID 可用于 catalog_product_entity_int
以获取整数列表
eav_attribute
可用于查找属性 id 96(在我的例子中)是显示是否活动的状态属性
这是正确的方法还是有更简单的方法?
到目前为止,我已经达到了
SELECT entity_id FROM `catalog_product_flat_9` WHERE sku = (SELECT p.sku
FROM catalog_product_entity AS p
LEFT JOIN catalog_category_product AS cp ON p.entity_id = cp.product_id
WHERE p.type_id = 'simple'
AND cp.category_id = 89)
这是行不通的,但至少是一个开始
这可能有点帮助。
这是我的查询,用于检索活跃的类别名称以及该类别中所有产品的数量,以使该数量大于零。
SELECT t0.value, t0.c0
FROM (
SELECT t2.value, (
SELECT COUNT(*)
FROM catalog_category_product AS t4
WHERE (t4.category_id = t1.entity_id)) AS c0
FROM catalog_category_entity AS t1
INNER JOIN catalog_category_entity_varchar AS t2 ON (t1.entity_id = t2.entity_id)
INNER JOIN catalog_category_entity_int AS t3 ON (t1.entity_id = t3.entity_id)
WHERE (((((t2.attribute_id = 41)
AND (t2.store_id = 0))
AND (t3.attribute_id = 42))
AND (t3.store_id = 0))
AND (t3.value = 1))) AS t0
WHERE (t0.c0 > 0)
不过我还没有尝试过按库存过滤产品。
我正在使用 Magento 数据库创建报告,但我无法让它与我合作。
我需要列出商店的类别以及每个类别中有多少活跃产品。
即: 手袋 (5) 鞋子 (12) 铅笔 (6)
等等
到目前为止我发现的是:
catalog_category_flat_store_9 列出商店的类别以及类别 ID
类别 ID 可用于
catalog_category_product
以获取产品 ID可以在
catalog_product_entity
中使用产品 ID 来获取 sku(并过滤掉配置的产品)可以在
catalog_product_flat_9
中使用 sku 来获取实体 ID(这是迟钝的 - 他们应该只包括类别,如果它在那里是活动的)实体 ID 可用于
catalog_product_entity_int
以获取整数列表eav_attribute
可用于查找属性 id 96(在我的例子中)是显示是否活动的状态属性
这是正确的方法还是有更简单的方法?
到目前为止,我已经达到了
SELECT entity_id FROM `catalog_product_flat_9` WHERE sku = (SELECT p.sku
FROM catalog_product_entity AS p
LEFT JOIN catalog_category_product AS cp ON p.entity_id = cp.product_id
WHERE p.type_id = 'simple'
AND cp.category_id = 89)
这是行不通的,但至少是一个开始
这可能有点帮助。
这是我的查询,用于检索活跃的类别名称以及该类别中所有产品的数量,以使该数量大于零。
SELECT t0.value, t0.c0
FROM (
SELECT t2.value, (
SELECT COUNT(*)
FROM catalog_category_product AS t4
WHERE (t4.category_id = t1.entity_id)) AS c0
FROM catalog_category_entity AS t1
INNER JOIN catalog_category_entity_varchar AS t2 ON (t1.entity_id = t2.entity_id)
INNER JOIN catalog_category_entity_int AS t3 ON (t1.entity_id = t3.entity_id)
WHERE (((((t2.attribute_id = 41)
AND (t2.store_id = 0))
AND (t3.attribute_id = 42))
AND (t3.store_id = 0))
AND (t3.value = 1))) AS t0
WHERE (t0.c0 > 0)
不过我还没有尝试过按库存过滤产品。