我有一张表,其中存储了一个树形结构。家庭结构基本上是
Category > Sub category > sub sub category
此处的父级是parent_id为0的父级。 我需要通过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
所以对于cat_id为6,我需要的结果是
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
我做错了什么
答案 0 :(得分:1)
创建一个检索父ID的函数
CREATE FUNCTION fn_getparentCatId
( id INT ) RETURNS INT
BEGIN
DECLARE parent_catid INT;
SET parent_catid = (SELECT parent_id FROM categoryTable WHERE cat_id=id);
RETURN parent_catid;
END
为父类别名称
创建另一个功能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