美文网首页MySQL
mysql实现递归查询

mysql实现递归查询

作者: 飞虎兄 | 来源:发表于2018-02-15 19:35 被阅读140次

mysql中没有提供递归查询的语句,我们通过mysql函数实现这种查询。

对于如下一张表privilege,递归查询系统管理下的记录。

id name parent_id
1 系统管理 NULL
2 角色管理 1
3 用户管理 1
4 用户添加 3
5 用户删除 3
6 角色添加 2
7 角色删除 2
需要使用的函数/sql
  1. 假如要查询系统管理及其下级菜单,对应的sql语句如下所示。我们通过自定义函数把IN中的id查出来即可。
SELECT * FROM privilege WHERE IN (1,2,3,4,5,6,7);
  1. FIND_IN_SET()函数:
        假如字符串str 在由N 子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间。一个字符串列表就是一个由一些被‘,’符号分开的子链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则 FIND_IN_SET() 函数被优化,使用比特计算。如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。
示例:SELECT FIND_IN_SET('2','1,A,2,4'); 返回值:3
  1. GROUP_CONCAT()函数

  该函数将group by产生的同一个分组中的值连接起来,返回一个字符串结果。

  1. 自定义函数
DROP FUNCTION IF EXISTS selectPrivilegeList;
CREATE FUNCTION selectPrivilegeList(id INT)
RETURNS VARCHAR(2000)
BEGIN
DECLARE sTemp VARCHAR(2000);
DECLARE subTemp VARCHAR(2000);
SET sTemp='$';
SET subTemp = CAST(id AS CHAR);
WHILE subTemp IS NOT NULL DO
SET sTemp= CONCAT(sTemp,',',subTemp);
SELECT GROUP_CONCAT(id) INTO subTemp FROM privilege WHERE FIND_IN_SET(parentId,subTemp)>0;
END WHILE;
RETURN sTemp;
END;
调用
SELECT * FROM privilege WHERE FIND_IN_SET(id,selectPrivilegeList(1));

相关文章

  • mysql实现递归查询

    mysql中没有提供递归查询的语句,我们通过mysql函数实现这种查询。 对于如下一张表privilege,递归查...

  • MySQL

    mysql递归查询组织机构mysql 递归查询 MySQL教程之concat以及group_concat的用法 M...

  • MySql递归查询实现父子查询

    父子查询 根据父id查询下面所有子节点数据。 功能需求 我们这里以sec_org(部门表)为例,在一个部门表里面包...

  • Mysql实现树形递归查询

    最近在做项目迁移,Oracle版本的迁到Mysql版本,遇到有些oracle的函数,mysql并没有,所以就只好想...

  • 教你如何使用 MySQL8 递归

    之前写过一篇 MySQL通过自定义函数的方式,递归查询树结构,从MySQL 8.0 开始终于支持了递归查询的语法 ...

  • 【MySQL】递归查询上下级

    环境 需要MySQL8.0+ 上下级关系图 建表语句 查询上下级sql语句 递归,查询本级以及所有下级 递归,查询...

  • MYSQL递归树查询的实现

    ​在oracle中我们可以使用connect by prior 函数来实现组织树表递归的查询,但是在mysql中却...

  • Mysql递归查询

    ms sqlserver数据库,支持with as 语法中直接递归调用。但mysql并不支持with as 语法,...

  • mysql递归查询

    在项目中会遇到同一个表中保存着父子关系的数据,最常见的就是处理树形结构资源。下面举个简单的例子,先看一下表: 然后...

  • mysql递归查询

    表如上: 调动语句:

网友评论

    本文标题:mysql实现递归查询

    本文链接:https://www.haomeiwen.com/subject/dpdutftx.html