mysql 如何获取其及其所有子孙的数据或id (二)

上篇讲到了mysql8.0如何获取其及其所有子孙的数据或id,现在来讲5.7的。

吐槽一下,原来公司老大跟我说用的是mysql8.0 ,然后项目部署上线后才知道是5.7,高版本到低版本总有语法不兼容的东西,所以  WITH RECURSIVE cte 用不了了。

查询了很多资料mysql 8.0递归只能用存储函数了。

##在创建存储函数前最好执行下这条代码,网上说开启了bin-log,不然可能会出现This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its de错误
SET GLOBAL log_bin_trust_function_creators=TRUE;
##权限获取子孙的函数
DROP FUNCTION IF EXISTS queryChildrenModuleInfo;
DELIMITER ;;
CREATE FUNCTION queryChildrenModuleInfo(moduleId INT)
RETURNS VARCHAR(4000)
BEGIN
DECLARE sTemp VARCHAR(4000);
DECLARE sTempChd VARCHAR(4000);

SET sTemp='$';
SET sTempChd = CAST(moduleId AS CHAR);

WHILE sTempChd IS NOT NULL DO
SET sTemp= CONCAT(sTemp,',',sTempChd);
SELECT GROUP_CONCAT(module_id) INTO sTempChd FROM module WHERE FIND_IN_SET(parent_id,sTempChd)>0;
END WHILE;
RETURN sTemp;
END;;
DELIMITER ;

创建完函数后,调用函数

获取自己及其所有子孙id

SELECT module_id FROM module WHERE FIND_IN_SET(module_id,queryChildrenModuleInfo(5));

获取自己及其所有子孙

SELECT * FROM module WHERE FIND_IN_SET(module_id,queryChildrenModuleInfo(5));

查看mysql 8.0的点击下面链接:

mysql 如何获取其及其所有子孙的数据或id (一)

 

想看更多精彩内容,可以关注我的CSDN

我的CSDN

posted @ 2021-05-31 10:57  Yblue  阅读(429)  评论(0编辑  收藏  举报