求一带父子关系的自关联的SQL

若鱼1919 2016-03-08 11:56:59

CREATE TABLE `sys_user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`username` varchar(64) NOT NULL COMMENT '用户名',
`password` varchar(32) NOT NULL COMMENT '密码',
`salt` varchar(64) DEFAULT NULL COMMENT '盐',
`locked` char(1) DEFAULT '0' COMMENT '账号是否锁定,1:锁定,0未锁定',
`parent_id` int(11) DEFAULT '0' COMMENT '上级用户id',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8

id name password salt locked parent_id
1 admin f3694f162729b7d0254c6e40260bf15c qwerty 0 0
2 com1 f3694f162729b7d0254c6e40260bf15c qwerty 0 1
3 com2 f3694f162729b7d0254c6e40260bf15c qwerty 0 1
4 com11 f3694f162729b7d0254c6e40260bf15c qwerty 0 2
5 com12 f3694f162729b7d0254c6e40260bf15c qwerty 0 2
6 com13 f3694f162729b7d0254c6e40260bf15c qwerty 0 2
7 com21 f3694f162729b7d0254c6e40260bf15c qwerty 0 3
8 com22 f3694f162729b7d0254c6e40260bf15c qwerty 0 3
9 com23 f3694f162729b7d0254c6e40260bf15c qwerty 0 3

级联关系可能有多级。

如何查询id=1的用户的所有子用户?

...全文
327 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
LongRui888 2016-03-08
  • 打赏
  • 举报
回复
你可以创建这个函数;
CREATE DEFINER=`root`@`%` FUNCTION `getChildList`(idd int) RETURNS varchar(1000) CHARSET utf8
    READS SQL DATA
begin
	declare strT varchar(1000);
    declare strChildT varchar(1000);    
    set strT = '$';                       /*初始化*/
    set strChildT = cast(idd as char);    /*凡事需要查找子节点的 父节点都会放到这里*/
	 
    while strChildT is not null do
		set strT = concat(strT , ',' , strChildT); /*第一次的时候就是: $,idd */
        select group_concat(id) into strChildT from sys_user where find_in_set(parent_id,strChildT);
    end while;
    
	return strT;   /*返回: idd所有子节点的逗号间隔的字符串,包含idd节点本身*/
end$$
然后查询 节点1下面的所有子节点:
select * from tb where find_in_set(id,getChildList(1));
ACMAIN_CHM 2016-03-08
  • 打赏
  • 举报
回复
http://blog.csdn.net/acmain_chm/article/details/4142971 MySQL中进行树状所有子节点的查询 在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方便的查了所有当前节点下的所有子节点。但很遗憾,在MySQL的目前版本中还没有对应的功能。 在MySQL中如果是有限的层次,比如我们事先如果可以确定这个树的最大深度是4, 那么所有节点为根的树的深度均不会超过4,则我们可以直接通过left join 来实现。 但很多时候我们...

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧