zoukankan      html  css  js  c++  java
  • mysql 递归查找所有子节点

    1 select dept_id from (
    2               select t1.dept_id,t1.parent_id,
    3               if(find_in_set(parent_id, @pids) > 0, @pids := concat(@pids, ',', dept_id), 0) as ischild
    4               from (
    5                    select dept_id,parent_id from sys_dept t where t.del_flag = '0' order by parent_id, dept_id
    6                   ) t1,
    7                   (select @pids := 要查询的节点id) t2
    8              ) t3 where ischild != 0;

    解释:

    @pids := 要查询的节点id   变量定义。
    concat()  拼接字符串
    find_in_set(parent_id, @pids)  parent_id 字符串是否在@pids字符串中。
      select find_in_set('2','1,2');返回2
      select find_in_set('6','1');返回0

    if(express1,express2,express3)条件语句,if语句类似三目运算符,当exprss1成立时,执行express2,否则执行express3;
    拆分语句:select dept_id,parent_id from sys_dept t where t.del_flag = '0' order by parent_id, dept_id
    select @pids := 要查询的节点id

    select * from (
    select dept_id,parent_id from sys_dept t where t.del_flag = '0' order by parent_id, dept_id
    ) t1,
    (select @pids :=4) t2

    select t1.dept_id,t1.parent_id,t2.*,
    if(find_in_set(parent_id, @pids) > 0, @pids := concat(@pids, ',', dept_id), 0) as ischild
    from (
    select dept_id,parent_id from sys_dept t where t.del_flag = '0' order by parent_id, dept_id
    ) t1,
    (select @pids := 4) t2

    select dept_id from (
    select t1.dept_id,t1.parent_id,t2.*,
    if(find_in_set(parent_id, @pids) > 0, @pids := concat(@pids, ',', dept_id), 0) as ischild
    from (
    select dept_id,parent_id from sys_dept t where t.del_flag = '0' order by parent_id, dept_id
    ) t1,
    (select @pids := 4) t2
    ) t3 where ischild != 0;

     
  • 相关阅读:
    什么时候应该使用C#的属性
    Unicode和字符集小结
    C#编译器怎么检查代码是否会执行
    C#中如何操作2个list
    用Windbg来看看CLR的JIT是什么时候发生的
    bzoj-1579: [Usaco2009 Feb]Revamping Trails 道路升级
    次小生成树
    bzoj-3687: 简单题
    bzoj-3669: [Noi2014]魔法森林
    uva 11732 (trie树)
  • 原文地址:https://www.cnblogs.com/bulrush/p/12015504.html
Copyright © 2011-2022 走看看