oracle对于树形查询可以使用start with ... connect by
select * from menu start with id='130000' connect by id = prior parent_id;
mysql随没有自带的语法支持,不过可以通过创建函数来实现递归查询
SELECT id AS ID,pid AS 父ID ,levels AS 父到子之间级数, paths AS 父到子路径 FROM (
SELECT id,pid,
@le:= IF (pid = 0 ,0,
IF( LOCATE( CONCAT('|',pid,':'),@pathlevel) > 0 ,
SUBSTRING_INDEX( SUBSTRING_INDEX(@pathlevel,CONCAT('|',pid,':'),-1),'|',1) +1
,@le+1) ) levels
, @pathlevel:= CONCAT(@pathlevel,'|',id,':', @le ,'|') pathlevel
, @pathnodes:= IF( pid =0,',0',
CONCAT_WS(',',
IF( LOCATE( CONCAT('|',pid,':'),@pathall) > 0 ,
SUBSTRING_INDEX( SUBSTRING_INDEX(@pathall,CONCAT('|',pid,':'),-1),'|',1)
,@pathnodes ) ,pid ) )paths
,@pathall:=CONCAT(@pathall,'|',id,':', @pathnodes ,'|') pathall
FROM treenodes,
(SELECT @le:=0,@pathlevel:='', @pathall:='',@pathnodes:='') vv
ORDER BY pid,id
) src
ORDER BY id
参考:
http://www.cnblogs.com/dukou/p/4691543.html
https://blog.youkuaiyun.com/guiguren/article/details/77574326
本文介绍在Oracle中使用startwith...connectby进行树形查询的方法,以及在MySQL中通过创建函数实现递归查询的技巧,提供详细的SQL语句示例。
2484

被折叠的 条评论
为什么被折叠?



