(示例数据是小冰自己的数据库哦,其中parent_id是必不可少的,因为这个是决定层级关系的字段)
--按照层级关系查询机构部门数据(Tree) WITH RECURSIVE temp AS ( SELECt r.* FROM sys_dept r UNIOn ALL SELECt r.* FROM sys_dept r,temp t WHERe t.id = r.parent_id )select DISTINCT temp.* from temp;
根据上面的sql查出来的数据,在程序中使用递归的方式(待更新),可以转换为层级树,返回给前端,前端再渲染一下,就可以得到一个具有阶级的Tree所有的数据,效果如下:
其实不用上面的sql,直接用代码写递归的方式也可以做到这个效果,用这个sql只是省去了一些排序、层级处理等逻辑
以下的sql是用在特定的业务场景下,酌情使用哦!
--根据子部门机构id查询顶级机构id,其中parent_id是父级id,parent_id=0是最顶级 SELECt T2.* FROM ( SELECt @r AS _id, ( SELECT @r := parent_id FROM sys_dept WHERe id = _id ) AS parent_id, @l := @l + 1 AS lvl FROM ( SELECt @r := #{子集id}, @l := 0 ) vars, sys_dept h WHERe @r != 0 ) T1 JOIN sys_dept T2 ON T1._id = T2.id AND T2.parent_id = 0
--根据某一个id查询该id下的所有子集,忽略深度,直接找到最后一个子集id SELECT id FROM ( SELECt t1.id, t1.parent_id, t2.*, IF ( find_in_set( parent_id, @pids ) > 0, @pids := concat( @pids, ',', id ), 0 ) AS ischild FROM ( SELECt id, parent_id FROM sys_dept t WHERe ORDER BY parent_id, id ) t1, ( SELECT @pids := #{需要查的id}) t2 ) t3 WHERe ischild != 0;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)