mysql 树结构递归处理】的更多相关文章

日常开发中我们经常会遇到树形结构数据处理,一般表结构通常会常用id,pid这种设计方案. 之前用oracle.sqlServer数据库,用相应的语法即可获取树形结构数据(oracel:connect by prior :sqlServer:with...as ...). 最近一个项目数据库用的是mysql,需求中含有获取树形结构数据的接口,由于之前没怎么用过mysql,于是第一时间就是查看mysql语法,看看有没有类似于oracle或sqlserver的递归语法,结果是没有,后来决定自定义数据库…
递归调用的应用场景常常出现在多级嵌套的情况,比如树形的菜单.下面通过一个简单的例子来实现mysql+mybatis的递归. 数据模型 private Integer categoryId; private String categoryName; private Integer isRoot; private Integer categoryLevel; private Integer rootCategoryId; private Integer parentCategoryId; priva…
在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方便的查了所有当前节点下的所有子节点.但很遗憾,在MySQL的目前版本中还没有对应的功能. 在MySQL中如果是有限的层次,比如我们事先如果可以确定这个树的最大深度是4, 那么所有节点为根的树的深度均不会超过4,则我们可以直接通过left join 来实现. 但很多时候我们无法控制树的深度.这时就需要在MySQL中用存储过程来实现或在你的程序中来实现这个递归.本文讨论一下几种实现的方法.…
select device_id,device_type,COUNT(1) count from ( select t1.device_id,t1.device_type,DATE_SUB(t1.record_dtm,INTERVAL -1 day) parent_id,t1.record_dtm id from health_sleep t1 where ( HOUR(first_sleep_time)>=23 or HOUR(first_sleep_time)<8 ) ORDER BY f…
工作记录 向上递归函数test: BEGIN ); ); SET sTemp = '$'; SET sTempChd =cast(rid as CHAR); WHILE sTempChd is not null DO SET sTemp = concat(sTemp,',',sTempChd); ; END WHILE; RETURN sTemp; END 参数:rid VARCHAR(50) 返回类型:varchar(1000) 调用: SELECT * from subcompany whe…
--获取当前及以下部门 Create proc GetCurrentAndUnderOrg @orgId int as begin WITH cte AS ( SELECT * ,0 AS level FROM Static_Organ WHERE OrganID=@orgId UNION ALL SELECT g.*,level+1 FROM Static_Organ g INNER JOIN cte ON g.ParentOrgan=cte.OrganID ) SELECT * FROM c…
getChildList: BEGIN #声明两个局部变量 ); ); #初始化局部变量 SET sTemp = ''; #调用cast函数将int转换为char SET sTempChd = rootId; #递归拼接 DO #存储每次递归结果 SET sTemp = sTempChd; #将参数作为pid,然后查询其子id,然后将子id作为pid, #查询以子id为pid的子id,依次循环下去,直到所有节点都为叶子节点 SELECT father_code INTO sTempChd FRO…
其中Channel.java是栏目结构,ChannelDto是我自己封装的返回给前端的数据,可以根据自己的来 这个的逻辑就是双重循环遍历每个类别,然后判断如果当前类别是其他类别的父级,那么就把其他类别的数据数据放到当前栏目的子集中 如果不想显示所有的栏目 可以修改这个判断 就会只展示这个栏目下的所有数据 channel.getPid().toString().equals("0") 这个直接查询所有栏目数据传进去即可 List<Channel> list 代码 public…
public static JSONArray treeMenuList(List<Map<String, Object>> menuList, Object parentId) { JSONArray childMenu = new JSONArray(); for (Object object : menuList) { JSONObject jsonMenu = JSONObject.fromObject(object); Object menuId = jsonMenu.g…
喜欢就点个赞呗! 源码<--请点击此处查看 引入 当我看到一些评论时,例如下面的样子.我挺好奇这个功能是怎么样做出来的.进过查阅资料,发现这其实是 MySQL 的递归操作.下面就让我操作一下怎么实现 MySQL 的递归查询. 设计数据库 观察这种数据库设计,你会发现他都有一个父节点,一直到根节点,所以我们设计数据库的时候,应该设置一个 parentid 字段.所以,我们可以得到以下的数据库. sql 脚本如下 CREATE TABLE digui( id INT(11) NOT null aut…