递归查询三种实现方式
- 方式一 创建自定义函数实现递归查询注意:
1.创建函数的时候,可能会报错。
This function has none of DETERMINISTIC 在MySQL安装根目录个人配置文件
my.ini中添加一行:log_bin_trust_function_creators=1
然后重启MySQL服务。
2.创建函数的时候用到了系统函数GROUP_CONCAT(),该函数默认长度是1024,在配置文件my.ini 中修改默认长度,添加一行语句:group_concat_max_len=102400 保存后重启MySQL服务。查询sql SELECT @@global.group_concat_max_len;
3.这种方式实现之后,调用简单,但是效率较慢,而且由于字段 、函数、 长度的的限制,数据量大的时候可能查询不全。适合小数据量下使用。
-
查询子节点的函数 查询时 包含自身创建函数: – 查询子节点的函数 查询时包含自身
-
CREATE DEFINER=
root
@localhost
FUNCTIONqueryChildren_1_sys_region
(areaId VARCHAR(15)) RETURNS varchar(20000) CHARSET utf8BEGINDECLARE sTemp VARCHAR(20000);DECLARE sTempChd VARCHAR(20000); SET sTemp=’$’;SET sTempChd = areaId; WHILE sTempChd IS NOT NULL DO SET sTemp= CONCAT(sTemp,’,’,sTempChd);SELECT GROUP_CONCAT(code) INTO sTempChd FROM sys_region WHERE FIND_IN_SET(parent_code,sTempChd)>0; END WHILE;RETURN sTemp;END查询示例:
– 子节点 含自己SELECT * from sys_region where FIND_IN_SET(code,queryChildren_1_sys_region('370000000