2015-05-04 68 views
0

我有一個表,我存儲了一個樹結構。基本上,家庭結構是獲取孩子類的家庭樹

Category > Sub category > sub sub category 

父這裏是一個與0 PARENT_ID我需要通過SQL獲得任何類別的家庭結構。表看起來像

cat_id | parent_id | name 
------------------------- 
1  | 0  | a 
2  | 0  | b 
3  | 1  | c 
4  | 2  | d 
5  | 3  | e 
6  | 4  | f 

因此對於4 CAT_ID,該結果我需要的是

c1.cat_id | c.name | c2.cat_id | c2.name | c3.cat_id | c3.name 
2    b  4   d   null   null 

因此對於6 CAT_ID中,結果我需要的是

c1.cat_id | c.name | c2.cat_id | c2.name | c3.cat_id | c3.name 
2    b  4   d   6    f 

這是我目前使用的代碼,它給出了每個結果不止一行

SELECT c1.name cat1, c1.cat_id cat1_id,c2.name cat2, c2.cat_id cat2_id ,c3.name cat3, c3.cat_id cat3_id 
FROM ea_category AS c1 
    JOIN ea_category AS c2 ON (c2.parent_id = c1.cat_id) 
    JOIN ea_category AS c3 ON (c3.parent_id = 0) 
where c1.cat_id = 4 

我在做什麼錯

+1

它給每個結果兩行以上,因爲有兩隻貓parent_id = 0',所以你最後一個'join'加入到他們兩個 –

+0

是的,我知道,但我只想要大孩子的父母 – Smith

回答

1

創建一個函數來檢索父ID

​​

創建父類別名稱的另一個功能

CREATE FUNCTION fn_getCatName 

    (id INT) RETURNS VARCHAR(10) 
BEGIN 
DECLARE categoryName Varchar(10); 
SET categoryName = (SELECT name FROM categoryTable WHERE cat_id=id); 
RETURN categoryName; 
END 

然後使用它像下面

SELECT cat_id, name 
     ,fn_getparentCatId(cat_id) , fn_getCatName(fn_getparentCatId(cat_id)) 
     ,fn_getparentCatId(fn_getparentCatId(cat_id)) , fn_getCatName(fn_getparentCatId(fn_getparentCatId(cat_id))) 

FROM categoryTable 
WHERE cat_id=6 
+0

這是mysql嗎? – Smith

+0

是 - 存儲過程 –