通过sql函数去对数据库中的树状数据进行操作

表结构

1.sql 形式

自定义一个函数getChildList(rootId INT)通过根Id遍历他的子节点

自定义函数

DELIMITER //
CREATE FUNCTION `getChildList`(rootId INT)
RETURNS VARCHAR(1000) READS SQL DATA
BEGINDECLARE sTemp VARCHAR(1000);DECLARE sTempChild VARCHAR(1000);SET sTemp = '$';SET sTempChild =CAST(rootId AS CHAR);WHILE sTempChild IS NOT NULL DOSET sTemp = CONCAT(sTemp,',',sTempChild);SELECT GROUP_CONCAT(catalogue_id) INTO sTempChild FROM `libary_catalogue` WHERE FIND_IN_SET(parent_id, sTempChild)>0;END WHILE;RETURN sTemp;
END //
DELIMITER ;

查询

SELECT lc.`catalogue_id`, lc.`catalogue_name`, lc.`parent_id`
FROM `libary_catalogue` AS lc
WHERE FIND_IN_SET(lc.`parent_id`, getChildList(#{catalogueId}))

删除

        DELETE FROM `libary_catalogue`WHERE `catalogue_id` IN(SELECT t.`catalogue_id`FROM(SELECT `catalogue_id`FROM `libary_catalogue`WHERE FIND_IN_SET(`parent_id`, getChildList(#{catalogueId}))) AS t)

2. 通过java代码去得到子节点

用递归的方式去拿所有节点的Id

    public void getChildIdList(List<Integer> idList, Integer parentId) {idList.add(parentId);List<CatalogueInfo> childList = fileDao.queryCatalogueChildByParentId(parentId);for (CatalogueInfo child : childList) {idList.add(child.getCatalogueId());getChildIdList(idList, child.getCatalogueId());}}

递归查询数据库中树状数据相关推荐

  1. JAVA从数据库中拿到数据

    我们都知道从数据库中拿到数据需要使用的是jdbc链接数据,然后将数据存储到ResultSet这样的集合中,然后利用Resultset的方法getObject获取里面的记录并且打印到页面上,当然我们可以 ...

  2. 清空SQL Server数据库中所有表数据的方法(转)

    清空SQL Server数据库中所有表数据的方法 其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入 ...

  3. oracle 数据 导出 excel 自动分多个文件,从oracle数据库中导出大量数据到excel中为什么自动分成了好几个excel文件《excel表格新手入门》...

    EXCEL中一个单元格中多行文本如何导入或复制到SQL SERVER 数据库表中? 保留换行符保存进数据表啊,读取出来显示的时候根据需要进行转换就行了,比如要在网页上显示,可以把换行符转换成HTML的 ...

  4. android 音乐 数据库,android从数据库中取音乐数据

    android从手机数据库中取音乐数据 直接贴代码 public void getMp3(){ list = new ArrayList<>(); Cursor mAudioCursor ...

  5. php checkbox 保存,PHP中在数据库中保存Checkbox数据

    PHP中在数据库中保存Checkbox数据 /* if we passed in an array of the checkboxes we want to be displayed as check ...

  6. 如何确定图片名未改变 php,这里未改变的是数据库中默认的数据,比如修改时间?,还有发布用户名?...

    摘要://问题描述------------------1.在DoEdit中修改-save保存的数据,是在edit中从数据库中获取的数据2.在编辑界面和DoEdit没有time()的更改,包括usern ...

  7. azure云数据库_在Azure SQL数据库中实现动态数据屏蔽

    azure云数据库 In this article, we will review Dynamic Data Masking in the Azure SQL database. Dynamic Da ...

  8. azure云数据库_Azure SQL数据库中的高级数据安全性–数据发现和分类

    azure云数据库 Azure SQL supports in building and managing wide range of SQL databases, tools, frameworks ...

  9. SQL Server数据库中批量导入数据

    在软件项目实施的时候,数据导入一直是项目人员比较头疼的问题.其实,在SQL Server中集成了很多成批导入数据的方法.有些项目实施顾问头疼的问题,在我们数据库管理员眼中,是小菜一碟.现在的重点就是, ...

最新文章

  1. beanutil 批量copy_Apache Commons Beanutils对象属性批量复制(pseudo-singleton)
  2. 启明云端方案分享| 小尺寸串口屏在充电桩的应用
  3. ddos常见攻击报文
  4. 编译liblinear
  5. RelativeLayout相对布局
  6. 每周荐书:分布式、深度学习算法、iOS(评论送书)
  7. 6.业务架构·应用架构·数据架构实战 --- 双轮驱动的技术架构设计
  8. 【GIS|原理】地统计分析
  9. 蓝桥杯真题:k倍区间
  10. python爬取起点中文网小说
  11. 你可知道利用独立博客进行淘宝客推广方法
  12. 明朝版的《北京欢迎你》
  13. vue+element-ui之表格中如何插入图片链接
  14. C#支付宝当面付扫码支付开发,包括demo代码的修改和蚂蚁金服开发平台的配置
  15. Vue 项目路由出现 message: “Navigating to current location (XXX) is not allowed“的问题
  16. Android Alarm定时任务基础
  17. AssetStudioGUI
  18. Python语言快速入门上
  19. 洛谷 P1135奇怪的电梯
  20. SpringBoot菜鸟教程(一)

热门文章

  1. [Clickhouse 入门到精通]-单机安装部署
  2. 无扩展,不 Chrome
  3. Window7 如何分屏
  4. 粗糙集理解之二:属性约简
  5. Web 3.0 :它是互联网的未来吗?
  6. 开源 Python IDE PyScripter设置中文界面
  7. ATMEL芯片系列介绍1
  8. 你们知道官网购买服务器可以返佣吗
  9. 折线迷你图怎么设置_Excel如何制作小微型的迷你图?
  10. 简单粗暴识别工作室Android识别模拟器