您现在的位置是:首页 > Mysql > 网站首页Mysql
简介
以前有个功能需要递归查询子节点,自己不会写,从网上摘了个sql,改了改能用。这几天又遇到一个类似的功能,但早已忘记sql怎么写,于是翻箱倒柜找出以前和朋友的聊天记录找到了sql,改了改又能用了。怕以后忘记,记录一下。。。这个写法是从网上找的,忘了从哪儿摘的了。。。
根据一个父节点查询所有子节点(包含自身)
SELECT rd.*
FROM (SELECT * FROM sys_dict WHERE parent_id IS NOT NULL) rd,
(SELECT @pid := '1') pd
WHERE FIND_IN_SET(parent_id, @pid) > 0
AND @pid := concat(@pid, ',', id)
union select * from sys_dict where id = @pid;

根据多个父节点查询所有子节点(包含自身)
SELECT rd.*
FROM (SELECT * FROM sys_dict WHERE parent_id IS NOT NULL) rd,
(SELECT @pid := '1,4') pd
WHERE FIND_IN_SET(parent_id, @pid) > 0
AND @pid := concat(@pid, ',', id)
union select * from sys_dict where FIND_IN_SET(id,@pid) > 0;

- 如果不想查询结果包含自身,去掉后边的union
- 如果只想查出某一列,可以套一层select(除了套一层select,别的我不会。。。)
风三郎,男,一个90后草根长!2014年入行。一直潜心研究php,一边工作一边积累经验,分享一些个人经验,另外本人也会在线上进行接单如果有需要,请进行再本站的需求栏目下留言。
最近一直有时间都在弄自己的博客,终于把需求和留言和申请友链的开通了

