您的位置:首页 > 数据库 > MySQL

mysql sql 根据父级id查询书所有的子孙级数据,或根据子级id查询对应的父级

2017-08-04 17:01 1001 查看
-- mysql递归查询,mysql中从子类ID查询所有父类(做无限分类经常用到)

SELECT T2.id, T2.channel_path 

FROM ( 

    SELECT 

        @r AS _id, 

        (SELECT @r := parent_id FROM cm_channel WHERE id = _id) AS parent_id, 

        @l := @l + 1 AS lvl 

    FROM 

        (SELECT @r := '2069ac487e2e49ddbdab78cba1e03828', @l := 0) vars, 

        cm_channel h 

    WHERE @r <> 0) T1 

JOIN cm_channel T2 

ON T1._id = T2.id 

ORDER BY T1.lvl DESC;

-- mysql递归查询,mysql中从父类ID查询所有子类(做无限分类经常用到)

DROP FUNCTION IF EXISTS `getChildrenList`;

CREATE FUNCTION `getChildrenList`(rootId VARCHAR(1000))  

RETURNS varchar(1000)  

  

  

BEGIN  

DECLARE sTemp VARCHAR(1000);  

DECLARE sTempChd VARCHAR(1000);  

  

  

SET sTemp = '$';  

SET sTempChd =cast(rootId as CHAR);  

  

  

WHILE sTempChd is not null DO  

SET sTemp = concat(sTemp,',',sTempChd);  

SELECT group_concat(id) INTO sTempChd FROM cm_channel where FIND_IN_SET(parent_id,sTempChd)>0;  

END WHILE;  

RETURN sTemp;  
END  

select * from cm_channel where FIND_IN_SET(id,getChildrenList('e3468f7776bf4cd184d3e05232ab162f'))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql mysql