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

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 (一)

标签:SET,sTempChd,子孙,module,sTemp,mysql,id
来源: https://www.cnblogs.com/yblue/p/14738957.html