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 表的主要内容,如果未能解决你的问题,请参考以下文章
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