2015-05-04 45 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

是 - 存储过程 –