当前位置: 首页 > article >正文

mysql树形结构返回是否叶子节点

我们界面上展示树形结构的时候往往会用到懒加载,做懒加载需要知道哪个节点是叶子节点,这样叶子节点就不需要继续往下加载了,这种需求可以通过sql实现

先来看下表结构

方式一,通过sql语句直接获取leaf

什么是叶子节点?就是没有哪个pid指向自己的就是叶子节点

第一步,获取所有pid

select distinct pid from department where pid is not null

 第二步,判断是不是叶子节点,就是id not in这些pid,完整语句如下

select *, 
(id not in  (select distinct pid from department where pid is not null)) as leaf
from department

查出的数据

方式二,加一个leaf字段

如果数据比较多,每次加个子查询比较耗时,可以加个leaf字段统一处理下,当然,统一处理后,以后每次新增和删除节点的时候都要维护下这个字段,比如新增时把父节点的leaf置为0,新增节点的leaf是1,删除时判断父节点有没有子节点了,没有就把leaf置为1

下面是统一处理方法

第一步,把所有节点设置为叶子节点

update department set leaf = 1

第二步,找到有子节点的节点,把leaf设置为0,这里面用到了上面相同的技巧,先查出所有pid,然后id in这些pid的,就说明有子节点,需要注意的是sql语句不允许update和where子查询用同一张表,需要把子查询转成子表,然后再select查询pid

update department set leaf = 0 
where id in 
(select pid from (select distinct pid from department where pid is not null) as a)

最终效果:


http://www.kler.cn/a/301546.html

相关文章:

  • 躺平成长-人工智能进行编程-(12)
  • vuex和pinia的区别
  • windows工具 -- 使用rustdesk和云服务器自建远程桌面服务, 手机, PC, Mac, Linux远程桌面 (简洁明了)
  • C++学习-空指针推荐使用nullptr
  • 大模型(LLMs)进阶篇
  • 代码随想录第46期 单调栈
  • JAVA数据导出为Excel
  • BERT_
  • ubuntu 20.04 部署standalone dolphinscheduler
  • 【K8S实践笔记】Kubernetes(v1.28)集群搭建部署(1)
  • 爬虫3:re正则表达式获取数据
  • 中英双语共享充电宝投放管理投资理财源码五级分销返利+地图显示模式
  • 微擎忘记后台登录用户名和密码怎么办?解决方法
  • 深入理解 JavaScript 中的 `void` 操作符
  • 水壶问题记录
  • 微服务网关终极进化:设计模式驱动的性能与可用性优化(四)
  • Linux 基础命令-压缩与解压缩
  • 基于SpringBoot+Vue+MySQL的滑雪场管理系统
  • 社群空间站9.9付费入群系统易支付版全套搭建教程
  • 掌握 Ansible:高效自动化运维的完整教程
  • 【4.2】图搜索算法-DFS和BFS解单词拆分
  • Mysql事件操作
  • 计算机网络练级第二级————网络套接字1
  • 嵌入式初学-C语言-数据结构--四
  • ​​​​​​​Oracle11 分析函数等高级函数使用说明
  • 智能会计定义