msql 递归查询所有父级 和子级信息

首先要说明的是表用的是树状表,即表中含有两个重要字段,即 每一条数据有id 和关联父级的 pid  

如果不是树状表或者查询量非常庞大的话 就请掠过此文!因为此种建表结合mysql函数递归查询方式数据库压力比较大!

如下是代码,表名是test   字段包含 id ,pid  ,如下函数中红色标记部分是 表名或者 字段名不同的 复制代码后可以根据自己的更改即可。


查询所有父级信息的mysql函数:

CREATE DEFINER=`root`@`localhost` FUNCTION `getParentList`(rootId varchar(100)) RETURNS varchar(1000) CHARSET utf8
BEGIN   
DECLARE fid varchar(100) default '';   
DECLARE str varchar(1000) default rootId;   
  
WHILE rootId is not null  do   
    SET fid =(SELECT pid FROM test WHERE id = rootId);   
    IF fid is not null THEN   
        SET str = concat(str, ',', fid);   
        SET rootId = fid;   
    ELSE   
        SET rootId = fid;   
    END IF;   
END WHILE;   
return str;  
END;

查询语句: select * from test where FIND_IN_SET(id,getParentList('10'));   结果为每条父类信息数组

  select getParentList('10'); 所有父类的id
 


查询所有子级信息的mysql函数:

CREATE DEFINER=`root`@`localhost` FUNCTION `getChildList`(rootId varchar(100)) RETURNS varchar(2000) CHARSET utf8
BEGIN   
DECLARE str varchar(2000);  
DECLARE cid varchar(100);   
SET str = '$';   
SET cid = rootId;   
WHILE cid is not null DO   
    SET str = concat(str, ',', cid);   
    SELECT group_concat(id) INTO cid FROM test where FIND_IN_SET(pid, cid) > 0;   
END WHILE;   
RETURN str;   
END;

查询语句:select * from test where FIND_IN_SET(id,getChildList('10'));

select getChildList('10'); 所有子类的id







你可能感兴趣的:(mysql)