码迷,mamicode.com
首页 > 数据库 > 详细

mysql树形结构递归查询

时间:2018-08-05 01:10:21      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:分享图片   getchild   etc   http   code   oracl   begin   ast   公司   

之前一直用的是Oracle,对于树形查询可以使用start with ... connect by 

select * from menu start with id=130000 connect by id = prior parent_id;

 没错,这是Oracle所支持的

现在公司用的是mysql,对于这种查询方式只能通过sql语句实现了

语言都是相通的,何况sql呢

mysql随没有自带的语法支持,不过可以通过创建函数来实现递归查询。

 

 如下图所示。。。

技术分享图片

 

直接上sql语句

create table `nodelist` (
    `id` int (11),
    `nodecontent` varchar (300),
    `pid` int (11)
); 
insert into `nodelist` (`id`, `nodecontent`, `pid`) values(1,a,NULL);
insert into `nodelist` (`id`, `nodecontent`, `pid`) values(2,b,1);
insert into `nodelist` (`id`, `nodecontent`, `pid`) values(3,c,1);
insert into `nodelist` (`id`, `nodecontent`, `pid`) values(4,d,2);
insert into `nodelist` (`id`, `nodecontent`, `pid`) values(5,e,3);
insert into `nodelist` (`id`, `nodecontent`, `pid`) values(6,f,3);
insert into `nodelist` (`id`, `nodecontent`, `pid`) values(7,g,5);
insert into `nodelist` (`id`, `nodecontent`, `pid`) values(8,h,7);
insert into `nodelist` (`id`, `nodecontent`, `pid`) values(9,i,8);
insert into `nodelist` (`id`, `nodecontent`, `pid`) values(10,j,8);

 

 之后创建一个函数

DROP FUNCTION IF EXISTS `getChild`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `getChild`(rootId INT) RETURNS VARCHAR(1000) CHARSET utf8
BEGIN
        DECLARE ptemp VARCHAR(1000);
        DECLARE ctemp VARCHAR(1000);
               SET ptemp = #;
               SET ctemp =CAST(rootId AS CHAR);
               WHILE ctemp IS NOT NULL DO
                 SET ptemp = CONCAT(ptemp,,,ctemp);
                SELECT GROUP_CONCAT(id) INTO ctemp FROM nodelist   
                WHERE FIND_IN_SET(pid,ctemp)>0; 
               END WHILE;  
               RETURN ptemp;  
    END$$
DELIMITER ;

OK,查询可以通过将函数当做一个查询条件。

SELECT * FROM nodelist WHERE FIND_IN_SET(id, getChild(3))

技术分享图片

借鉴 https://www.jianshu.com/p/f99665266bb1

里面用到的内置函数 https://baijiahao.baidu.com/s?id=1595349117525189591&wfr=spider&for=pc

你只要能想到的,都有对应的解决方式,幸运的是你该踩得一些坑别人实现给你填好了。

mysql树形结构递归查询

标签:分享图片   getchild   etc   http   code   oracl   begin   ast   公司   

原文地址:https://www.cnblogs.com/c-h-y/p/9420726.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!