mysql 递归查询树形结构,mysql递归查询树节点

mysql 递归查询树形结构,mysql递归查询树节点,Mysql树形递归查询的实现方法

本文主要介绍Mysql树递归查询的实现方法,通过示例代码进行了详细介绍,对您的学习或工作有一定的参考价值。有需要的朋友一起学习吧。

前言

对于数据库中的树形结构数据,比如部门表,有时候,我们需要知道一个部门的所有下属部门或者某个部门的所有上级部门。这时候就需要用到mysql递归查询了。

最近在项目迁移过程中,把oracle版本迁移到mysql版本,遇到了一些Oracle的函数,但是Mysql没有,我只好自定义函数或者想办法替换掉。

Oracle递归查询

Oracle可以使用start with.通过连接实现递归查询。

连接递归查询的基本语法是:

1从表格中选择开始于.通过以前的id=PID连接

Start with:表示什么是根节点,可以写成1=1,没有限制。如果id为123的节点是根节点,则它被写成start with id=123。

Connect by:connect by是必需的,start with在某些情况下可以省略,或者直接从1=1开始,没有限制。

prior:prior关键字可以放在等号的前面或后面,表示不同的意思。例如,prior:prior=pid表示pid是该记录的根节点。

具体可以参考我之前写的一篇甲骨文博客:https://www.jb51.net/article/156306.htm.

Oracle方面的实现

select id=' listUnitInfo ' result type=' com . admin . system . unit . model . unit model ' databaseId=' Oracle '

选择不同的单位代码,

u.unit_name

单位电话,

u.para _单位代码

来自lzcity_approve_unit_info u

从1=1开始

if test='unitCode!=null和unitCode!='''

u.unit_code=#{unitCode}

/如果

if test='unitName!=null和unitName!='''

和u.unit_name,如“%”| | # { unitName } | | ' % '

/如果

通过先前的u.unit_code=u.para_unit_code连接

和u.unit _ code ltu.para _单位代码

/选择

Mysql递归查询

下面主要介绍Mysql的实现。Mysql不提供类似的功能,只能通过自定义函数来实现。网上有很多这样的资料,但是我已经不知道文章是原创了。这篇博客写得很好,https://www.jb51.net/database/201209/152513.html.我也用下面作者提供的方法来实现我自己。感谢作者的分享。

这里借用作者提供的自定义函数,加上Find_in_set函数find _ in _ set (u.unit _ code,getunitChildList (# {unitcode})),getunitChildList就是一个自定义函数。

select id=' listUnitInfo ' result type=' com . admin . system . unit . model . unit model ' databaseId=' MySQL '

选择不同的单位代码,

u.unit_name

单位电话,

u.para _单位代码

从t _单位_信息u

在哪里

if test='unitCode!=null和unitCode!='''

和find_in_set(u.unit_code,getunitChildList(#{unitCode}))

/如果

if test='unitName!=null和unitName!='''

和u.unit_name,如concat('% ',#{unitName},' % ')

/如果

/哪里

/选择

GetUnitChildList自定义函数

分隔符$$

使用` gd_base`$$

如果存在,则删除函数` getUnitChildList`$$

CREATE DEFINER=`root`@`% `函数` getUnitChildList`(rootId INT)返回VARCHAR(1000) CHARSET utf8

开始

声明sChildList VARCHAR(1000);

声明sChildTemp VARCHAR(1000);

SET sChildTemp=CAST(rootId为CHAR);

而sChildTemp不为空DO

如果(sChildList不为空)则

SET sChildList=CONCAT(sChildList,',',schild temp);

其他

SET sChildList=CONCAT(schild temp);

结束IF;

SELECT GROUP _ CONCAT(UNIT _ code)INTO schild temp FROM LZ city _ APPROVE _ UNIT _ INFO其中FIND_IN_SET(para_unit_code,schild temp)0;

结束WHILE

返回sChildList

结束$$

分隔符;

总结

这就是本文的全部内容。希望这篇文章的内容对你的学习或工作有一定的参考价值。有问题可以留言交流。谢谢你的支持。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 使用php连接mysql数据库,php连接数据库的方法
  • 使用php连接mysql数据库,php连接数据库的方法,一文详解PHP连接MySQL数据库的三种方式
  • pymysql菜鸟教程,pymysql 使用
  • pymysql菜鸟教程,pymysql 使用,pymysql模块使用简介与示例
  • mysql锁实现,mysql锁算法
  • mysql锁实现,mysql锁算法,MySQL锁机制与用法分析
  • mysql连接报错10061,mysql连接错误10060
  • mysql连接报错10061,mysql连接错误10060,MYSQL无法连接 提示10055错误的解决方法
  • mysql连接报10060错误,mysql连接报错10055
  • mysql连接报10060错误,mysql连接报错10055,MySQL连接异常报10061错误问题解决
  • mysql辅助索引和主键索引,mysql 主键 外键 索引
  • mysql辅助索引和主键索引,mysql 主键 外键 索引,MySQL索引之主键索引
  • MySQL语句大全,mysql常见语句总结
  • MySQL语句大全,mysql常见语句总结,MySQL语句整理及汇总介绍
  • mysql触发器的使用方法实验报告,mysql中触发器的使用
  • 留言与评论(共有 条评论)
       
    验证码: