使用 SQL 列出 Magento 中某个类别中的有效产品

List active products in a category in Magento with SQL

我正在使用 Magento 数据库创建报告,但我无法让它与我合作。

我需要列出商店的类别以及每个类别中有多少活跃产品。

即: 手袋 (5) 鞋子 (12) 铅笔 (6)

等等

到目前为止我发现的是:

  1. catalog_category_flat_store_9 列出商店的类别以及类别 ID

  2. 类别 ID 可用于 catalog_category_product 以获取产品 ID

  3. 可以在 catalog_product_entity 中使用产品 ID 来获取 sku(并过滤掉配置的产品)

  4. 可以在 catalog_product_flat_9 中使用 sku 来获取实体 ID(这是迟钝的 - 他们应该只包括类别,如果它在那里是活动的)

  5. 实体 ID 可用于 catalog_product_entity_int 以获取整数列表

  6. 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)

不过我还没有尝试过按库存过滤产品。