精华内容
下载资源
问答
  • 本程序写了两个sql存储过程,子节点查询算是照搬了,父节点查询是逆思维弄的
  • MYSQL递归查询所有父节点 1、表结构: CREATETABLE`t_busi_system`( `ID`varchar(64)NOTNULLCOMMENT'标识', `PARENT_ID`varchar(64)DEFAULTNULLCOMMENT'父id', `CREATE_DATE`varchar(64)DEFAULTNULLCOMMENT'创建...

    MYSQL递归查询所有父节点

    1、表结构:

    CREATE TABLE `t_busi_system` (
      `ID` varchar(64) NOT NULL COMMENT '标识',
      `PARENT_ID` varchar(64) DEFAULT NULL COMMENT '父id',
      `CREATE_DATE` varchar(64) DEFAULT NULL COMMENT '创建时间',
      `CREATE_USER_ID` varchar(64) DEFAULT NULL COMMENT '创建人id',
      `CREATE_USER_NAME` varchar(64) DEFAULT NULL COMMENT '创建人姓名',
      `LAST_UPDATE_DATE` varchar(64) DEFAULT NULL COMMENT '最后更新时间',
      `LAST_UPDATE_USER_ID` varchar(64) DEFAULT NULL COMMENT '最后更新人id',
      `LAST_UPDATE_USER_NAME` varchar(64) DEFAULT NULL COMMENT '最后更新人姓名',
      `SYSTEM_NAME` varchar(255) DEFAULT NULL COMMENT '系统名称'
      PRIMARY KEY (`ID`)
    )

    2、SQL:

    SELECT T2.id, T2.SYSTEM_NAME
    FROM ( 
        SELECT 
            @r AS _id, 
            (SELECT @r := parent_id FROM T_BUSI_SYSTEM WHERE id = _id) AS parent_id, 
            @l := @l + 1 AS lvl 
        FROM 
            (SELECT @r := '065efb0ee42e4c77a401bcf0f3eccf20', @l := 0) vars,  
            T_BUSI_SYSTEM h 
        WHERE @r <> 0) T1 
    JOIN T_BUSI_SYSTEM T2 
    ON T1._id = T2.id 
    ORDER BY T1.lvl DESC
    展开全文
  • <p>SELECT @id AS _id, (SELECT @id := pid FROM tbl_lanmu WHERE id = _id) AS pid, @sort :=...网上很多帖子mysql根据子节点查询父节点都是这样写的。。哪个大神能指导一下</p>
  • mysql根据父节点递归查询所有子节点 在开发中,我们经常遇到通过父级节点查询所有子节点的需求,我们知道在mysql中我们可以自定义函数的方式来实现这个功能,但是自定义函数根据父节点递归查询所有子节点的方法需要...

    mysql根据父节点递归查询所有子节点

    在开发中,我们经常遇到通过父级节点查询所有子节点的需求,我们知道在mysql中我们可以自定义函数的方式来实现这个功能,但是自定义函数根据父节点递归查询所有子节点的方法需要额外维护函数,故而增加了维护成本,于是我们有了通过直接改用sql
    查询的方式来实现递归查询。

    根据一个父节点查询所有子节点(包含自身)

    SELECT au.id 
    FROM (SELECT * FROM t_app_user WHERE parent_id IS NOT NULL) au,
         (SELECT @pid := '1') pd 
    WHERE FIND_IN_SET(parent_id, @pid) > 0 
      AND @pid := concat(@pid, ',', id)
    union select id from t_app_user where id = '1';
    

    根据多个父节点查询所有子节点(包含自身)

    SELECT au.id 
    FROM (SELECT * FROM t_app_user WHERE parent_id IS NOT NULL) au,
         (SELECT @pid := '1,4') pd 
    WHERE FIND_IN_SET(parent_id, @pid) > 0 
      AND @pid := concat(@pid, ',', id) 
    union select id from t_app_user where FIND_IN_SET(id,@pid) > 0;
    

    原文地址:https://blog.csdn.net/xikaifeng/article/details/115631724

    展开全文
  • 数据量5k+,参照博客中给出的函数,运行一次需要15s,耗时太长,所以最终没有选择在Mysql中进行数据的遍历,而是采用在用户选取父节点时,在类中遍历,总体耗时会小很多,也不会给用户带来尺钝感。 平时使用Mysql 的...

    数据量5k+,参照博客中给出的函数,运行一次需要15s,耗时太长,所以最终没有选择在Mysql中进行数据的遍历,而是采用在用户选取父节点时,在类中遍历,总体耗时会小很多,也不会给用户带来尺钝感。

    平时使用Mysql 的函数不多,所以还是记录下来以后学习使用

    1. 在Mysql 中函数创建后会提示This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its de的错误信息,参照博客:MySQL 创建函数报错 This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators
      解决办法由两个:
      • 在函数体前写一句 set global log_bin_trust_function_creators=TRUE; 但是每次重启后都需要重新运行一遍
      • 在my.cnf配置文件中设置
        log-bin-trust-function-creators=1 重启后即可生效
    2. 如果函数创建后修改运行会提示:MySQL: create a function but it already exists
      需要在函数提前添加DROP FUNCTION IF EXISTS funcName;
      解决答案:stackflow
    3. 函数体,这里我也是似懂非懂,直接贴地址:Mysql递归获取某个父节点下面的所有子节点和子节点上的所有父节点
      其中IF(exp1,exp2,exp3)将会依次执行三个表达式,如果1不成功就执行2,同样不成功执行3
      FIND_IN_SET :是查询在改字符串中是否有指定的字符,
      在这里插入图片描述
    create table mrm_level(
        id int auto_increment,
        name char(255) not null ,
        parentId int not null,
        contentId int not null ,
        path longtext ,
        type boolean,
        primary key (id)
    )engine = InnoDB default charset = utf8;
    
    
    
    
    drop function if exists getChildList;
    delimiter  $$
    create function getChildList(pid int) returns varchar(2000)
    begin
        declare str varchar(100);
        declare cid varchar(100);
        set str = ' ';
        set cid = pid;
        while cid is not null do
            set str = concat(str,',',cid);
            select group_concat(contentId) into cid from mrm_level where find_in_set(parentId,cid)>0 ;
            end while;
        set str = substring(str,2);
        return str;
    end$$;
        delimiter ;
    
    select * from mrm_level where find_in_set(id,getChildList(2)) and type =0
    
    展开全文
  • 建表语句: CREATE TABLE dimension_... pid VARCHAR(128) COMMENT '类目id' , name VARCHAR(128) COMMENT '节点名称' , updater VARCHAR(128) COMMENT '更新人id' , update_time DATETIME COMMENT '更新时间'

    建表语句:

    CREATE TABLE dimension_tree(
        id VARCHAR(128) NOT NULL   COMMENT '主键' ,
        pid VARCHAR(128)    COMMENT '父类目id' ,
        name VARCHAR(128)    COMMENT '节点名称' ,
        updater VARCHAR(128)    COMMENT '更新人id' ,
        update_time DATETIME    COMMENT '更新时间' ,
        creater VARCHAR(32)    COMMENT '创建人' ,
        create_time DATETIME    COMMENT '创建时间' ,
        remark VARCHAR(3072)    COMMENT '描述' ,
        PRIMARY KEY (id)
    ) COMMENT = '目录树表';;

    用'-'拼接所有的父节点名称

    SELECT GROUP_CONCAT(T2.`name` ORDER BY T1.lvl DESC separator'-') as pName
    FROM ( 
        SELECT 
            @r AS _id, 
            (SELECT @r := pid FROM dimension_tree WHERE id = _id) AS pid, 
            @l := @l + 1 AS lvl 
        FROM 
            (SELECT @r := '9', @l := 0) vars,  
            dimension_tree h 
        WHERE @r <> 0) T1 
    JOIN dimension_tree T2 
    ON T1._id = T2.id 

    结果:

     

    展开全文
  • 根据父节点查询出下面所有的子节点 SELECT t3.id FROM ( SELECT *, IF (find_in_set(t1.parentId, @p) >0,@p:= concat(@p,',',id),0) AS childId FROM (SELECT id,parentId FROM sys_menu t WHERE t....
  • NAVICAT中截图 表结构如下图 ...查询父节点 代码如下 BEGIN DECLARE i varchar(100) default ''; DECLARE j varchar(1000) default rootId; WHILE rootId is not null do SET i =...
  • mysql根据父节点id获取所有子节点

    千次阅读 2019-08-29 16:22:14
    DROP TABLE IF EXISTS `city`; CREATE TABLE `city` ( `i_id` int(11) NOT NULL AUTO_INCREMENT, `p_id` int(11) DEFAULT NULL, `c_name` varchar(50) COLLATE utf8_bin DEFAULT NULL, `status` char(1) C...
  • 代码 博文链接:https://blueskylan.iteye.com/blog/848423
  • MySQL查询父节点下面的所有子孙节点 SELECT id,dept_name,parent_id FROM (SELECT id,parent_id,dept_name FROM sys_dept where parent_id > 0 ORDER BY parent_id, sort) a, (SELECT @pv :=1) b WHERE ...
  • 这个能查到父节点下的子节点(不包括父节点) SELECT staff_id, parent_staff_id FROM ( SELECT t1.staff_id, t1.parent_staff_id, IF ( find_in_set( parent_staff_id, @pids ) > 0, @pids := c...
  • select id from ( select t1.id,t1.parent_id, if(find_in_set(parent_id, @pids) > 0, @pids := concat(@pids, ',', id), 0) as ischild from ( select id,parent_id from t_pem_event_type t ...
  • mysql树级查询父节点,子节点集合

    千次阅读 2019-12-05 17:09:13
    准备工作 1、表结构及数据 CREATE TABLE `tbl_group_ext` ( `GRP_ID` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键', `PAR_ID` int(10) DEFAULT NULL... `GRP_NM` varchar(20) DEFAULT NULL COMMENT '节点名称'...
  • mysql根据子节点查询所有父节点(不用函数或过程) SELECT T1.id,T1.`name`,T1.pid,T2.sort FROM tbl_lanmu T1 INNER JOIN ( SELECT @id AS _id, (SELECT @id := pid FROM tbl_lanmu WHERE id = _id) AS pid, ...
  • https://blog.csdn.net/qq_39706128/article/details/90286850?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_utm_term~default-0.control&spm=1001.2101.3001.4242
  • mysql递归查找父节点

    千次阅读 2020-01-07 00:21:44
    用存储过程查找父节点: 把找到的数据插入临时表。@lastid是为了防止出现死循环。 # SELECT * FROM db1 . t1 ; drop procedure if exists p1 ; delimiter $ create procedure p1 ( in pid integer ) ...
  • 转载:https://blog.csdn.net/qq_36827957/article/details/79939198  
  • BEGIN declare lev int; -- 查询父级 set lev=1; drop table if exists tmp1;... CREATE TABLE tmp1(ID VARCHAR(40),Wl_Code varchar(50),ParentCode varchar(40) ,levv INT);... -- 用拼接的方式拼接表...
  • MySQL根据子节点id查询所有父节点

    千次阅读 2018-12-05 10:28:07
    数据表的结构: id name parent_id --------------------------- Home 0 About 1 Contact 1 Legal 2 Privacy 4 Products 1 Support 1 SELECT T2.id, T2.nam...
  • MySQL中自定义函数来实现递归获取所有子节点,该方式的优点是可以减少java代码量,缺点是:1.不好维护;2.拼接的字段太长的时候,自定义函数的返回值可能容量不够,此时可以定义为text等大容量类型;3:show ...
  • mysql--遍历查询父节点

    2021-04-09 14:49:00
    mysql–遍历查询父节点 sys_dept 这个换成自己的表名 字段说明:dept_id:数据ID , pid :父节点ID ; simple_name 名称 (这三个字段更改成自己的字段既可) SELECT T2.dept_id, T2.simple_name FROM ( SELECT @...
  • MySQL根据父节点id查询所有子节点

    万次阅读 热门讨论 2018-12-05 10:30:35
    --根据id查询子节点--&gt; &lt;select id="sonId" parameterType="java.lang.String" resultType="com.tl.visual.model.SystemRelate"&gt; SELECT class_id FROM ( ...
  • MySQL查询某个子节点的顶级节点(根节点)或者所有父节点 假设表t_menu为: id(varchar) parent_id(varchar) name(varchar) 111 null aaa 222 111 bbb 333 222 ccc 查询id为...
  • mysql查询当前节点的所有父节点信息

    千次阅读 2018-12-26 11:06:26
    SELECT T2.id, T2.name, T2.pid FROM (  SELECT  @r AS _id,  (SELECT @r := pid FROM digui WHERE id = _id) AS pid,  @l := @l + 1 AS lvl  ...(SELECT @r := 6, @l := 0) vars,  ...pid:父节点字段
  • 查询该节点所以的父节点 SELECT T2.id,T2.title,T1.lvl FROM ( SELECT @r AS _id, ( SELECT @r := parent_id FROM t_sys_menu WHERE id = _id ) AS parent_id, @l := @l + 1 AS lvl FROM ( SELECT @...
  • 1. 引言 先贴上建表SQL: DROP TABLE IF EXISTS `t_org`; CREATE TABLE `t_org` ( `id` int(11) NOT NULL, `name` varchar(20) DEFAULT NULL, `parent_id` int(11) DEFAULT NULL, ... 遍历所有父节点 待补充。。。
  • BEGIN DECLARE sTemp text; DECLARE sTempChd text; SET sTemp = '$'; SET sTempChd =cast(rootId as CHAR); ...WHILE sTempChd is not null DO SET sTemp = concat(sTemp,',',sTempChd);...SELECT group_concat(deptId) ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,737
精华内容 11,094
关键字:

mysql父节点

mysql 订阅