MySQL自定义函数递归查询

用于递归查找Id(通过parentId关联)参数为int 类型的值:

CREATE DEFINER=`root`@`%` FUNCTION `getChildList`(rootId INT) RETURNS text CHARSET utf8
BEGIN 

       DECLARE sTemp text; 

       DECLARE sTempChd text; 

       SET sTemp = ‘$‘; 

       SET sTempChd =cast(rootId as CHAR); 

       WHILE sTempChd is not null DO 

         SET sTemp = concat(sTemp,‘,‘,sTempChd); 

         SELECT group_concat(id) INTO sTempChd FROM sys_company where FIND_IN_SET(parent_id,sTempChd)>0; 

       END WHILE; 

       RETURN sTemp; 

END

通常 group_concat 有长度限制,当结果大于这个限制时就会导致查询出的数据不全,解决方案:改变group_concat 的最大长度。

首先查询一下目前group_concat 的长度限制(默认好像是1024):

SELECT @@global.group_concat_max_len;

修改长度:

SET GLOBAL group_concat_max_len=102400; 

修改后可以在运行下查询命令,看一下长度是否修改成功。

但这种方法mysql服务重启后就会失效。彻底修改需要修改mysql的配置文件:

在MySQL配置文件中my.conf或my.ini中添加:

  #[mysqld]
  group_concat_max_len=102400

  或group_concat_max_len = -1  # -1为最大值

重启MySQL服务即可。

原文地址:https://www.cnblogs.com/MrZheng/p/9923495.html

时间: 2024-10-16 11:42:07

MySQL自定义函数递归查询的相关文章

MySQL 自定义函数CREATE FUNCTION实例

分享一个MySQL 自定义函数CREATE FUNCTION的实例.mysql> delimiter $$mysql> CREATE FUNCTION myFunction-> (in_string VARCHAR(255),-> in_find_str VARCHAR(20),-> in_repl_str VARCHAR(20))->-> RETURNS VARCHAR(255)-> BEGIN-> DECLARE l_new_string VARC

数据库系列之mysql 自定义函数function,函数和存储过程的区别

mysql 自定义函数function,函数和存储过程的区别 https://blog.csdn.net/u010365819/article/details/80470448 1.MySQL自定义函数简介 在MySQL中使用自定义函数也需要相应的要求,语法如下, 创建新函数: Create function function_name(参数列表) returns返回值类型 函数体内容 相关说明, 函数名:应该合法的标识符,并且不应该与已有的关键字冲突.一个函数应该属于某数据库,可以使用db_n

MySQL自定义函数、视图、索引

MySQL视图 创建视图:(虚拟表)create or replace view 名称 as select ...(查询语句) MySQL自定义函数只有一个返回值,不能返回结果集,可以在SQL语句中调用自定义函数functiondelimiter // drop function if exists getname;create function getname(studentid int)-- 定义返回类型returns varchar(20)begin -- 声明变量    declare

java mysql自定义函数UDF之调用c函数

正如sqlite可以定义自定义函数,它是通过API定义c函数的,不像其他,如这里的mysql.sqlite提供原生接口就可以方便的调用其他语言的方法,同样的mysql也支持调用其它语言的方法. google "mysql call c function"发现一片文章 MySQL User Defined Functions  This tutorial explains what an User Defined Function (UDF) is, what it does and w

MySQL 自定义函数

自定义函数 创建自定义函数 CREATE FUNCTION function_name RETURNS {STRING | INTERGER | REAL | DECIMAL} routine_body 关于函数体 函数体由合法的SQL语句构成 函数体可以是简单的SELECT或INSERT语句 函数体如果为复合结构则使用BEGIN...END语句 复合结构可以包含声明,循环,控制结构 删除函数 drop function if exists function_name;

MYSQL自定义函数实现表中递归层次的展现

1.现在以菜单表为例,在数据库中创建表test_menu. 2.在表中创建一些实例数据 现在的菜单层次为cd_1与cd_2为一级菜单,cd_1下分为cd_1_1与cd_1_2两个二级菜单,cd_1_1下有个三级菜单cd_1_1_1,目录结构如下 cd_1 cd_1_1 cd_1_1_1 cd_1_2 cd_2 3.创建自定义函数 4.查询菜单层次 在此,菜单的各层次就很清晰的展现出来了.

mysql自定义函数--得到字符串中最后一个分隔符前面的内容

工作中使用到一些特殊的字符串,比如'50-1-1-2-3',当需要得到'50-1-1-2'时可使用以下自定义函数 DELIMITER $$ USE `mydb`$$ DROP FUNCTION IF EXISTS `get_content_before_last_separator`$$ CREATE DEFINER=`root`@`%` FUNCTION `get_content_before_last_separator`(charStr VARCHAR(200),separatorStr 

mysql自定义函数

与vba交互不方便python写,做一个很简单的 有了就更新,没有就插入表的函数. 用的是navicat的工具 参数: IN yahoo_code varchar(20) , IN begin_date char(10), IN end_date char(10) 函数内容: BEGIN    DECLARE stockArea VARCHAR(20);select b.marketName into @stockArea from Instruments a LEFT JOIN Markets

mysql自定义函数与过程中写法的注意事项

1 BEGIN 2 #Routine body goes here... 3 /* 4 update szzx_goods_common set gc_id=i where gc_name=(SELECT gc_name from szzx_goods_class where gc_id=i); 5 */ 6 DECLARE i,goodsid int(11); 7 declare goodsname,img varCHAR(200); 8 set i=104; 9 WHILE i<1815 d