我必须计算每个类别中的产品,例如我有一个有两个孩子B和C的类别A.
B类有10个产品,C类有5个产品。
我想编写一个计算A = 15
B = 10
C = 5
等产品的查询。
我写了一个只计算子类别的查询。
我的查询如下:
SELECT
c.`id`,
c.`parent_id`,
c.`name`,
c.`slug`,
c.`route_id`,
c.`description`,
c.`excerpt`,
c.`sequence`,
c.`image`,
c.`seo_title`,
c.`meta`,
c.`enabled`,
(SELECT
COUNT(`product_id`)
FROM
HM_category_products
WHERE
HM_category_products.category_id IN (SELECT
HM_categories.`id`
FROM
HM_categories
WHERE
(id = c.`id` OR id = c.`parent_id`))) AS count
FROM
`HM_categories` AS c
编辑: - 下面是我的表格结构。这只是一个例子。
Category Table
id parent_id name slug enabled
1 0 Mobiles & Tablets mobiles-tablets 1
2 1 Mobile Phones mobile-phones 1
3 1 Tablets tablets 1
4 1 Mobile Accessories mobile-accessories 1
5 0 Electronics & Computers electronics-computers 1
6 5 Cameras & Accessories cameras-accessories 1
7 5 TV - Video - Audio tv-video-audio 1
Category Product Table
product_id category_id
1 2
2 2
3 2
4 2
5 3
6 2
7 3
8 3
9 3
10 2
11 3
12 2
13 2
14 2
15 2
答案 0 :(得分:1)
你要使用" Group by"有类似的东西:
SELECT
category_id, COUNT(*)
FROM
HM_category_products
GROUP BY category_id
这将使您的表 HM_category_products 按category_id分组,因此将知道表中每个类别的鬃毛行,这意味着您将知道每个类别的产品数量。然后,您可以将此结果表与类别一起加入以获取类别信息。 (对不起我的英文)
GROUP BY语句与聚合一起使用 函数用于将结果集分组为一列或多列。 SQL GROUP BY Statement
了解更多信息abaut" Group by"读 12.16.2 GROUP BY Modifiers和 12.16.1 GROUP BY (Aggregate) Functions
编辑:我现在看到你的意思。我已经给你了方向,但这里有一步之遥:免责声明:这个问题只是一个例子,它没有工作CREATE VIEW view_2 AS
SELECT
category_id, COUNT(*) AS product_sum
FROM
HM_category_products
GROUP BY category_id
CREATE VIEW view_1 AS
SELECT
*
FROM
HM_categories
LEFT JOIN
view_2 AS a ON HM_categories.id = a.category_id;
SELECT
id,
name,
(SELECT
SUM(product_sum)
FROM
view_1
WHERE
parent_id = final.id) as product_count
FROM
HM_categories AS final;
通过这种方式,您将获得父类别的产品,您最后一次选择" product_count"对于孩子们的类别,但这很容易,因为你已经把它放在了view_1上(再次对不起我的英语)