2

我正在尝试解决每个类别中所有产品的计数问题。产品由PRODUCT_ID唯一标识。PRD_PRODUCTS表没有 CATEGORY_ID 字段,但所有产品都在 PRODUCT_ID 和 CATEGORY_ID的连接表PRD_CATEGORIES中连接。

我有 2 张桌子:

PRD_PRODUCTS 和 PRD_CATEGORIES。

PRD_PRODUCTS
------------
PRODUCT_ID  - varchar(64)
TITLE - varchar(64)

PRD_CATEGORIES
--------------
CATEGORY_ID - varchar(64)
PRODUCT_ID - varchar(64)
TITLE - varchar(64)

示例数据:
PRODUCT_ID:5e313ec3bf7b967569eec196b4693829(分配给每个产品的唯一 ID)
TITLE:产品名称一(产品名称)
PARENT_CATEGORY_ID:(与 CATEGORY_ID 连接)
CATEGORY_ID:10(每个类别的唯一标识符)

这就是我目前正在使用的,并且只是在错误之后得到错误。最后一个错误说 PRODUCT_ID 字段不存在,但我确定它确实存在。希望对这件事有新的看法……

$db->query="SELECT count(a.PRODUCT_ID), 

    a.PRODUCT_ID,
    a.TITLE 

    FROM 

    PRD_PRODUCTS AS a, 
    PRD_CATEGORIES AS b

    LEFT JOIN PRD_PRODUCTS ON a.PRODUCT_ID = b.PRODUCT_ID

    LEFT JOIN PRD_CATEGORIES ON b.CATEGORY_ID = c.CATEGORY_ID 

WHERE a.SHOW_ON = 'A' 

GROUP BY a.PRODUCT_ID

ORDER BY a.TITLE DESC";
4

2 回答 2

1

你不只是在寻找这样的东西吗?

SELECT CATEGORY_ID, COUNT(PRODUCT_ID) AS product_count
  FROM PRD_CATEGORIES
  GROUP BY CATEGORY_ID

更新过滤器:

SELECT pc.CATEGORY_ID, COUNT(pc.PRODUCT_ID) AS product_count
  FROM PRD_CATEGORIES pc
      ,PRD_PRODUCTS p
  WHERE pc.PRODUCT_ID = p.PRODUCT_ID
    AND p.SHOW_ON = 'A'
  GROUP BY CATEGORY_ID
于 2012-05-19T02:25:44.963 回答
0

不,他需要将两个表连接在一起才能知道哪些产品属于哪个类别。我不确定为什么原始代码会加入两次?如果我理解他正在尝试做什么,那么他应该将产品 ID 加入类别(反之亦然),然后计算不同产品 ID 的数量......对吗?

此外,分组需要更改为按类别分组,因为这就是您要总结的...

SELECT 
     b.TITLE 
    ,count(distinct a.PRODUCT_ID)
 from PRD_PRODUCTS a
 left join  PRD_CATEGORIES b on b ON a.PRODUCT_ID = b.PRODUCT_ID
GROUP BY b.TITLE
于 2012-05-19T02:33:04.040 回答