MySQL (# of Products in Category) COUNT() w/ LEFT JOIN & ON 2 表

Posted

技术标签:

【中文标题】MySQL (# of Products in Category) COUNT() w/ LEFT JOIN & ON 2 表【英文标题】:MySQL (# of Products in Category) COUNT() w/ LEFT JOIN & ON 2 Tables 【发布时间】:2012-05-26 13:37:30 【问题描述】:

我正在尝试解决获取每个类别中所有产品的计数问题。产品由 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";

【问题讨论】:

【参考方案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

【讨论】:

嗨 Glenn,我认为这实际上可以解决我的部分问题,但我还需要通过 WHERE SHOW_ON = 'A' - SHOW_ON 在 PRD_PRODUCTS 表中过滤产品。 我终于可以休息一下了……这个让我重回正轨。我不得不对我的表格进行一些调整,但它解决了问题。【参考方案2】:

不,他需要将两个表连接在一起才能知道哪些产品属于哪个类别。我不确定为什么原始代码会加入两次?如果我理解他想要做什么,那么他应该将产品 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

【讨论】:

“每个类别的所有产品的计数”只需要 PRD_CATEGORIES 表来计数 - 如果 - 每个类别都被确保被产品使用。但是这里似乎缺少太多信息:没有 CATEGORY 表,建议的查询引用了不在表定义中的列,并且正在检索不属于问题的列。所以我不太确定真正被问到的是什么:) 我很欣赏这个建议,但我仍然遇到这种类型的问题: 警告:函数:runQuery 原因:您的 SQL 语法有错误;检查与您的 mysql 服务器版本相对应的手册,以在第 3 行的“ON a.PRODUCT_ID = b.PRODUCT_ID GROUP BY b.TITLE”附近使用正确的语法查询: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; 服务器:Localhost via UNIX socket 服务器版本:5.5.21-55

以上是关于MySQL (# of Products in Category) COUNT() w/ LEFT JOIN & ON 2 表的主要内容,如果未能解决你的问题,请参考以下文章

B. The Number of Products

C++ Array of Array Products :exited,segmentation fault

MySQL — SQL 语法错误(WHERE IN UNION)

MySQL创建自定义函数提示:This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its ......

mysql 创建函数ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in

mysql install of step in Windows 10