精华内容
下载资源
问答
  • mysql 递归函数写法
    2021-01-27 21:23:45

    递归函数写法

    CREATE FUNCTION dgsf (areaId VARCHAR(1000))

    RETURNS VARCHAR(4000)

    BEGIN

    DECLARE sTemp VARCHAR(4000);

    DECLARE sTempChd VARCHAR(4000);

    SET sTemp = '$';

    SET sTempChd = areaId;

    WHILE sTempChd is not NULL DO

    SET sTemp = CONCAT(sTemp,',',sTempChd);

    SELECT group_concat(con_parent_unid) INTO sTempChd FROM fcp_uimp_allcontent where FIND_IN_SET(con_unid,sTempChd)>0;

    END WHILE;

    return sTemp;

    END;

    调用

    select  * from fcp_uimp_allcontent a where   FIND_IN_SET(a.con_unid, dgsf('370,400'))

    更多相关内容
  • 众所周知,目前的mysql版本中并不支持直接的递归查询,但是通过递归到迭代转化的思路,还是可以在一句SQL内实现树的递归查询的。这个得益于Mysql允许在SQL语句内使用@变量。以下是示例代码。 创建表格 CREATE TABLE...
  • 对于数据库中的树形结构数据,如部门表,有时候,我们需要知道某部门的所有下属部分或者某部分的所有上级部门,这时候就需要用到mysql递归查询 最近在做项目迁移,Oracle版本的迁到Mysql版本,遇到有些oracle的...
  • MySQL递归查询 三种实现方式,方式一:使用自定义函数实现,方式二:纯SQL实现,方式三:适用于MySQL8及以上使用 WITH RECURSIVE实现
  • 两种mysql递归tree查询效率-mysql递归tree,提供两种递归算法
  • 主要介绍了MySQL通过自定义函数实现递归查询父级ID或者子级ID,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 主要介绍了PHP递归写入MySQL实现无限级分类数据操作,涉及mysql数据库的创建以及php递归写入、读取数据库分类相关操作技巧,需要的朋友可以参考下
  • 因此在这里采用类似递归的方法对菜单的所有子节点进行查询。 准备 创建menu表: CREATE TABLE `menu` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '菜单id', `parent_id` int(11) DEFAULT NULL COMMENT '父...
  • 地区表MySql递归sql脚本
  • 简介:mysql5.0.94版本,该版本以及较高级的版本(5.5、6等等)尚未支持循环递归查询,和sqlserver、oracle相比,mysql难于在树状表中层层遍历的子节点。本程序重点参考了下面的资料,了两个sql存储过程,子节点...
  • Mysql 5 递归

    2022-03-01 11:28:30
    最近在弄SQL server 转MySQL,需要将SQL server 的函数转成MySQL 函数,SQL server 用到了 with cte as ()select * cte 这是一个递归函数 WITH cte AS ( SELECT p.* FROM pt_permission p WHERE ...

    最近在弄SQL server 转MySQL,需要将SQL server 的函数转成MySQL 函数,SQL server 用到了

    with cte as ()select * cte 

    这是一个递归函数

    WITH cte AS (
    		SELECT p.*
    		FROM
    		pt_permission p
    		WHERE 
    		( p.sys_id = 0 or p.sys_id = #sysId# ) and /* 20160627 cyx*/
    		p.parent_id = #parentId# and p.disabled=0 and permission_code not IN('PT_PROJECT_LIST','PT_USER_ADMINLIST','PT_EQU_ENTITY_LIST','DATA_DTU_NEW','DATA_DTU_LAST','DATA_XT_NEW','PT_USER_EXCEL','PT_SMS_COUNT')
    		UNION ALL
    		SELECT pe.*
    		FROM
    		pt_permission pe
    		INNER JOIN cte c ON c.id = pe.parent_id and pe.disabled=0
    		) 
    		SELECT
    			*
    		FROM
    			cte;

    现在要转成MySQL 实现递归,不过目前我们公司用的MySQL 5 没有with cte as 函数,MySQL 8 倒是有了with cte as ,不过现在要自己实现MySQL 递归。

    一,自定义函数

    1.1 创建函数 

            

    CREATE DEFINER=`root`@`localhost` FUNCTION `get_value_of`(sys_id varchar(1000)) RETURNS varchar(1000) CHARSET utf8
    begin 
     declare ids varchar(1000) default ''; 
     declare tempids varchar(1000); 
     
     set tempids = sys_id; 
     while tempids is not null do 
      set ids = CONCAT_WS(',',ids,tempids);
      select GROUP_CONCAT(id) into tempids from pt_permission where FIND_IN_SET(parent_id,tempids)>0;
     end while; 
     return ids; 
    end
    • 自定义函数名称为:get_value_of
    • pt_permission:表名称
    • sys_id:参数

    1.2 根据上面SQL server 的语句逻辑,编写sql

    SELECT DISTINCT * from pt_permission pe WHERE FIND_IN_SET(id,get_value_of(
    
    	(SELECT
    		GROUP_CONCAT(p.id )  
    	FROM
    		pt_permission p 
    	WHERE
    	 p.sys_id = 0 or p.sys_id = '2'  -- 参数p.sys_id
    	and 
    		p.parent_id = '0' -- 参数p.parent_id
    		AND p.disabled = 0 
    		AND permission_code NOT IN ( 'PT_PROJECT_LIST', 'PT_USER_ADMINLIST', 'PT_EQU_ENTITY_LIST', 'DATA_DTU_NEW', 'DATA_DTU_LAST', 'DATA_XT_NEW', 'PT_USER_EXCEL', 'PT_SMS_COUNT' ) 
    		)
    
    )) AND pe.disabled = 0 
    

    1.3 思路

            首选是梳理你的递归,是向上递归,还是向下递归,然后梳理递归的参数,参数是一个值,还是一个数组,

    展开全文
  • 之前过一篇 MySQL通过自定义函数的方式,递归查询树结构,从MySQL 8.0 开始终于支持了递归查询的语法 CTE 首先了解一下什么是 CTE,全名 Common Table Expressions WITH cte1 AS (SELECT a, b FROM table1), ...
  • mysql 递归

    2022-04-27 17:43:01
    向下递归 SELECT T2.* FROM ( SELECT @r AS _id, (SELECT @r := id FROM yd_file_folder WHERE parent_id = _id) AS id, @l := @l + 1 AS lvl FROM (SELECT @r := 576, @l := 0) vars, yd_file_folder h ...

    向下递归

    SELECT
       T3.id
    FROM
       (
          SELECT
             @ids AS _ids,
             (
                SELECT
                   @ids := GROUP_CONCAT(id)
                FROM
                   yd_file_folder
                WHERE
                   FIND_IN_SET(parent_id, @ids)
             ) AS T1,
             @l := @l + 1 AS level_
          FROM
             yd_file_folder,
             (SELECT @ids := {$pid}, @l := - 1) T4
          WHERE
             @ids IS NOT NULL
       ) T2,
       yd_file_folder T3
    WHERE
       FIND_IN_SET(T3.id, T2._ids)
    ORDER BY
       level_,
       id

    向上递归

    SELECT T2.id, T2.name 
    FROM ( 
        SELECT 
            @r AS _id, 
            (SELECT @r := parent_id FROM yd_file_folder WHERE id = _id) AS parent_id, 
            @l := @l + 1 AS lvl 
        FROM 
            (SELECT @r := 5, @l := 0) vars, 
            yd_file_folder h 
        WHERE @r <> 0) T1 
    JOIN yd_file_folder T2 
    ON T1._id = T2.id 
    ORDER BY T1.lvl DESC;

    展开全文
  • mysql递归

    2021-01-18 19:46:11
    sql Server可以用with as 语法,mysql没有这个功能,只能用别的方式了,目前的mysql版本中并不支持直接的递归查询,但是通过递归到迭代转化的思路,还是可以在一句SQL内实现树的递归查询的。这个得益于Mysql允许在...

    sql Server可以用with as 语法,mysql没有这个功能,只能用别的方式了,目前的mysql版本中并不支持直接的递归查询,但是通过递归到迭代转化的思路,还是可以在一句SQL内实现树的递归查询的。这个得益于Mysql允许在SQL语句内使用@变量。以下是示例代码。 创建表格 CREATE TABLE `treenodes` ( `id` int , -- 节点ID `nodename` varchar (60), -- 节点名称 `pid` int -- 节点父ID );

    插入测试数据

    INSERT INTO `treenodes` (`id`, `nodename`, `pid`) VALUES ('1','A','0'),('2','B','1'),('3','C','1'), ('4','D','2'),('5','E','2'),('6','F','3'), ('7','G','6'),('8','H','0'),('9','I','8'), ('10','J','8'),('11','K','8'),('12','L','9'), ('13','M','9'),('14','N','12'),('15','O','12'), ('16','P','15'),('17','Q','15'),('18','R','3'), ('19','S','2'),('20','T','6'),('21','U','8');

    查询语句 复制代码 SELECT id AS ID,pid AS 父ID ,levels AS 父到子之间级数, paths AS 父到子路径 FROM ( SELECT id,pid, @le:= IF (pid = 0 ,0, IF( LOCATE( CONCAT('|',pid,':'),@pathlevel) > 0 , SUBSTRING_INDEX( SUBSTRING_INDEX(@pathlevel,CONCAT('|',pid,':'),-1),'|',1) +1 ,@le+1) ) levels , @pathlevel:= CONCAT(@pathlevel,'|',id,':', @le ,'|') pathlevel , @pathnodes:= IF( pid =0,',0', CONCAT_WS(',', IF( LOCATE( CONCAT('|',pid,':'),@pathall) > 0 , SUBSTRING_INDEX( SUBSTRING_INDEX(@pathall,CONCAT('|',pid,':'),-1),'|',1) ,@pathnodes ) ,pid ) )paths ,@pathall:=CONCAT(@pathall,'|',id,':', @pathnodes ,'|') pathall FROM treenodes, (SELECT @le:=0,@pathlevel:='', @pathall:='',@pathnodes:='') vv ORDER BY pid,id ) src ORDER BY id 复制代码 最后的结果如下: 复制代码 ID 父ID 父到子之间级数 父到子路径 ------ ------ ------------ --------------- 1 0 0 ,0 2 1 1 ,0,1 3 1 1 ,0,1 4 2 2 ,0,1,2 5 2 2 ,0,1,2 6 3 2 ,0,1,3 7 6 3 ,0,1,3,6 8 0 0 ,0 9 8 1 ,0,8 10 8 1 ,0,8 11 8 1 ,0,8 12 9 2 ,0,8,9 13 9 2 ,0,8,9 14 12 3 ,0,8,9,12 15 12 3 ,0,8,9,12 16 15 4 ,0,8,9,12,15 17 15 4 ,0,8,9,12,15 18 3 2 ,0,1,3 19 2 2 ,0,1,2 20 6 3 ,0,1,3,6 21 8 1 ,0,8 复制代码

    展开全文
  • Mysql 递归查询

    2022-04-03 17:54:46
    Mysql 递归查询
  • MySQL函数-递归函数

    2022-04-21 15:05:53
    find_in_set函数使用 FIND_IN_SET(str,strlist) str 要查询的字符串 strlist 字段名 参数以”,”分隔 如 (1,2,6,8) 精确匹配 ,分隔的数据 mysql中find_in_set()函数...MySql中使用函数实现递归查询 - 简书 ...
  • mysql8支持了递归,写法如下 WITH RECURSIVE cte (n) AS ( SELECT 1 UNION ALL SELECT n + 1 FROM cte WHERE n < 5 ) SELECT * FROM cte; 以后遍历菜单,遍历目录等很方便
  • mysql实现递归查询的方法

    千次阅读 2021-12-21 14:09:59
    小编给大家分享一下mysql实现递归查询的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧! mysql实现递归查询的方法:首先创建表,并初始化数据;然后向下递归,利用【find_in_set()】函数和...
  • MySQL 在 8.0 的版本引入了公共表表达式(Common Table ...CTE 还可以用来写递归,这个在 MSSQL SERVER 上很早就能做到了。先来看一个 Demo,使用递归生成 1 - 5 的数字系列。WITH RECURSIVE cte (n) AS(SELECT 1UNI...
  • Mysql 递归函数

    2021-02-10 02:48:33
    Mysql 没有递归的参数,需要自定义函数,才能使用递归,方法如下,仅供参考:1.在数据库定义如下方法;DETERMINISTIC (注,有主从的情况下使用,数据一致性)BEGINDECLAREsTemp VARCHAR(4000);DECLAREsTempChd VARCHAR...
  • mysql递归存储过程

    2013-04-05 00:38:54
    包括两个存储过程,一个是建立临时表用来存储需要的数据,另一个利用临时表进行操作。
  • 递归mysql语法

    2021-04-07 13:50:43
    这个还没完 先记录一下后续补充 WITH recursive `t` AS ( (SELECT base_marketing_manage.firm_id AS firm_id, base_marketing_manage.firm_id AS top_id, base_marketing_manage.marketing_level AS ...
  • mysql递归查询.txt

    2018-10-30 09:28:26
    mysql递归查询.txt,里面mysql递归查询的例子,方便需要的朋友使用,可读性强,简单实用
  • mysql 8.0实现递归

    2021-01-21 14:12:04
    借助mysql 8.0的cte,可以实现递归,如下:+----+----------+--------------+| ID | ParentID | name |+----+----------+--------------+| 1 | 0 | 河南省 || 2 | 1 | 信阳市 || 3 | 2 | 淮滨...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 59,028
精华内容 23,611
关键字:

递归mysql怎么写

mysql 订阅