2014-03-28 104 views
0

我正在開發一個系統,其中有一個類別和子類別的列表。我按照給定的數據庫結構如下:獲取沒有其他子類別的子類別的計數

category_id | category_name | Parent_id 
    1    India   0 
    2    US   0 
    3    Mumbai  1 
    4    Delhi   1 
    5    New Delhi  4 

現在我有兩個主要類別(印度和美國)和這兩個父類的子類3。我想計算子類別的數量,其中有沒有進一步的子類別,即印度和美國

最頂部的父元素對於如

India 
/ \ 
Mumbai Delhi 
      \ 
      New Delhi 
     / \ 
     N1  N2 

現在,我想父ID jsons與子類別的數量誰沒有其他子類別。 在這種情況下,計數應爲2,因爲孟買沒有子類別,新德里沒有子類別。

{"category_name" : "India", "Count" => "3"} // (Mumbai , N1, N2 because they have no further subcategories) 

它應該在所有父類別的循環中完成。我試圖使用遞歸函數得到它,但沒有得到確切的結果。 有什麼幫助嗎?

編輯: 我有類似的SQLFIDDLE它,但它只顯示子類別的計數。我想要計數沒有更多子類別的子類別。 請參考給定的鏈接。 SQL Fiddle

回答

0

您可以使用下面的查詢使用下面的查詢來獲取子節點數。

SELECT c.id,c.Name, COUNT(a.ID) as cnt 
FROM tblparent c 
INNER JOIN tblParent a 
ON a.ParentID = c.ID 
GROUP BY c.ID,c.Name 
UNION 
SELECT c.id,c.Name, 0 as cnt 
FROM tblparent c 
where c.ID not in (select parentid from tblParent) 

它會給你以下結果

1 India 2 
2 USA 0 
3 Mumbai 0 
4 Delhi 1 
5 New Delhi 0 

希望這將幫助你!

謝謝 蘇雷什

+0

我沒有得到你如何寫它。你能否根據我提供的SQLFIDDLE來做到這一點。 –

+0

SELECT c.catid,c.Name,COUNT(a.catid)作爲CNT FROM c類 INNER JOIN類別 ON a.pcatid = c.catid GROUP BY c.pcatid,c.Name UNION 選擇c.pcatid,c.Name,0 as cnt FROM category c where c.catid not in(從類別中選擇pcatid) – Suresh

+0

查看結果。它並不像我期待的那樣工作。請再讀一遍我的問題。輸出中應該有兩個父類別,這些子類別沒有其他子元素。 –

相關問題