上篇讲到了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的点击下面链接: