用mysql统计分类产品

时间:2015-01-15 08:06:22

标签: mysql sql

我必须计算每个类别中的产品,例如我有一个有两个孩子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    

1 个答案:

答案 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 Modifiers12.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上(再次对不起我的英语)