2011-11-01 25 views
0
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 

這給子類別的數量爲每個類別MySQL的數子表和它的主表的子表

,我可以爲產品seperately運行,這樣我會得到的產品數量爲每個類別

我想要的是每個類別的子類別數量和產品數量。如何形成查詢?

應該是這樣catename的(子類)計數和(產品)

+2

這是一個有點討厭表的設計 - 具有主類別ID和子產品表中的產品識別碼可能會導致不一致 - 產品與類別/子類別中的產品不相關。 –

+0

所以你有什麼建議...只有產品表中的子類別id就夠了不是嗎? –

回答

0

因爲你可以有子類別指定類別,計數,但沒有真正上市等子類產品,你可能不會得到你所期望的結果...這應該趕都爲您

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 
+0

aaww ...感謝您的回覆,但我怎麼才能彌補這樣的疑問......如何彌補這樣的疑問......實踐使完美不是它......我可以掌握任何概念,但我無法跟蹤sql ...你在這個 –

+0

@JayapalChandran上的建議,有時候,人們會試圖在一個單一的查詢中進行太多的嘗試......這就是爲什麼我試圖將事情分解成獨特的元素。在這種情況下,來自不同來源的兩種不同類型的計數。單獨的查詢分別進行各自的聚合並加入共同的「id」對我來說是最有意義的。希望這個查詢DID適合你。瞭解較小的查詢,然後查看它們如何適合整體結果集。 – DRapp

0

試試這個:

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

aaww ...感謝您的回覆,但我怎麼才能彌補這樣的疑問...如何彌補這樣的疑問...實踐使完美不是它...我可以掌握任何概念,但我無法跟蹤sql ...你對此的建議 –

+0

如何學習彌補這樣的極端查詢? –