玖叶教程网

前端编程开发入门

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

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言