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

-- 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'))

你可能感兴趣的:(mysql)