【发布时间】:2014-07-16 21:19:12
【问题描述】:
我一直在阅读this 并理解所有查询,直到计算每个类别中的项目。我已在此处粘贴查询和结果。
SELECT parent.name, COUNT(product.name)
FROM nested_category AS node ,
nested_category AS parent,
product
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND node.category_id = product.category_id
GROUP BY parent.name
ORDER BY node.lft;
+----------------------+---------------------+
| name | COUNT(product.name) |
+----------------------+---------------------+
| ELECTRONICS | 10 |
| TELEVISIONS | 5 |
| TUBE | 2 |
| LCD | 1 |
| PLASMA | 2 |
| PORTABLE ELECTRONICS | 5 |
| MP3 PLAYERS | 2 |
| FLASH | 1 |
| CD PLAYERS | 2 |
| 2 WAY RADIOS | 1 |
+----------------------+---------------------+
到底发生了什么?有两个名为 node 和 parent 的nested_category 表副本。在示例的情况下,总共有 10 个项目,因此自 node.category_id = product.category_id 以来选择了 10 个“节点”。那么每个节点至少存在一个父节点。但我不明白查询的COUNT(product.name) 部分。这如何为您提供每个类别的项目数?我对sql不是很熟练。
编辑:我在这段代码中发现了一个缺陷。它不会显示零项目的类别。 This seems to fix it,不过我也不是很懂。
【问题讨论】:
-
那 是 一篇很棒的文章 - 但遗憾的是它使用了 olde worlde 逗号连接语法 :-(
-
取出
GROUP BY子句并从product.name中删除COUNT( )函数,然后运行未分组的选择以查看在分组/计数之前它是如何将事物连接在一起的。如果它可以帮助您了解正在发生的事情,请向选择添加更多列。
标签: mysql sql nested-sets