MySQL подсчета и его подтаблицы для своей основной таблицы - PullRequest
0 голосов
/ 01 ноября 2011
Table 1 - Category

id | name

Table 2 - subcat

id | cid(category.id) | name

Table 3 - products

id | cid(category.id) | sid(subcat.id) | name

select a.* , count(b.id) as total
         from category a left join
         subcategory b on a.id=b.cid 
         group by a.id order by a.name

это дает количество подкатегорий для каждой категории

, и я могу работать отдельно для продуктов, так что я получу количество продуктов для каждой категории

, что я хочуколичество подкатегорий и количество продуктов для каждой категории.Как сформировать запрос?

Это должно быть как catename, количество (подкатегорий) и количество (продуктов)

Ответы [ 2 ]

0 голосов
/ 01 ноября 2011

Попробуйте это:

select c.name,count(sc.id),count(sub.pcount)
from subcat sc
inner join
(
    select p.sid as subid, count(p.id) as pcount from Products p 
    inner join subcat sc on sc.id = p.sid
    group by p.sid
) sub
on sub.subid = sc.id
inner join Category c on c.id = sc.cid
group by sc.id,sub.pcount
0 голосов
/ 01 ноября 2011

Поскольку у вас могут быть подкатегории для данной категории, но на самом деле нет продуктов, перечисленных для этой подкатегории, вы можете не получить ожидаемых результатов ... Это должно поймать вас обоих

select a.id,
       a.name, 
       BySubCat.AvailableSubCategories,
       ByProduct.ActualSubCats,
       ByProduct.ProductCount
   from
      category a

         left join
            ( select cid, count(*) as AvailableSubCategories
                 from subcat
                 group by cid ) BySubCat
            on a.id = BySubCat.cid

         left join
            ( select cid,
                     count( distinct sid ) as ActualSubCats,
                     count(*) ProductCount
                 from
                    products
                 group by
                    cid ) ByProduct
            on a.id = ByProduct.cid
  order by
     a.name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...