原贴:
https://blog.csdn.net/m0_38015877/article/details/76690363
-- mysql递归查询,mysql中从子类ID查询所有父类(做无限分类经常用到)
SELECT T2.id, T2.channel_path
FROM (
SELECT
@r AS _id,
(SELECT @r := parent_id FROM cm_channel WHERE id = _id) AS parent_id,
@l := @l + 1 AS lvl
FROM
(SELECT @r := '2069ac487e2e49ddbdab78cba1e03828', @l := 0) vars,
cm_channel h
WHERE @r <> 0) T1
JOIN cm_channel T2
ON T1._id = T2.id
ORDER BY T1.lvl DESC;
-- mysql递归查询,mysql中从父类ID查询所有子类(做无限分类经常用到)
DROP FUNCTION IF EXISTS `getChildrenList`;
CREATE FUNCTION `getChildrenList`(rootId VARCHAR(1000))
RETURNS varchar(1000)
BEGIN
DECLARE sTemp VARCHAR(1000);
DECLARE sTempChd VARCHAR(1000);
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 cm_channel where FIND_IN_SET(parent_id,sTempChd)>0;
END WHILE;
RETURN sTemp;
select * from cm_channel where FIND_IN_SET(id,getChildrenList('e3468f7776bf4cd184d3e05232ab162f'))
场景我们基本设计的表是这样的temp表
id
, name, parent_
id
当我们查某个节点的所有子节点的时候,我们需要递归
查询
id
= 4select * from temp where parent_
id
= 4
id
s = [5,9,25]select * from temp where parent_
id
in [5,9,25]那么这种方法在层数达到一定层的时候势必带来性能问题,因为需要多次...
我一直在试图解决这个问题,但是我什么都没走,希望有人可以救我。我的问题是我正在使用邻接列表
数据
模型在
mysql
中生成我的层次结构
数据
。我可以将表(见下文)检索到多维数组中,并且每个项目都具有关联数组。我想要做的就是一旦得到这个数组,我想得到另一个数组,其所有节点(子,孙等)都位于
父
ID
(包括
父
项)下。我只是无法锻炼如何在其中编写代码的PHP。在
MySQL
中,我的表如下所示:
id
name ...
SELECT
@r AS _
id
,
(SELECT @r := parent_
id
FROM cm_channel WHERE
id
= _
id
) AS parent_
id
,
CREATE TABLE `ds_relation_folder` (
`
id
` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增
Id
',
`parent_folder_
id
` int(11) NOT NULL COMMENT '
父
类文件夹
Id
',
`child_folder_
id
` int(11) DEFAULT NULL COMMENT '子文件夹
Id
',
`create_time` timestamp NOT NULL DEF
在
MySQL
中,可以使用递归
查询
来获取一个部门下所有的
子级
部门包括
子级
的
子级
。
WITH RECURSIVE cte AS (
SELECT
id
, name, parent_
id
FROM department
WHERE parent_
id
= ?
UNION ALL
SELECT d.
id
, d.name, d.parent_
id
FROM department d
mysql
如何获取其及其所有
子孙
的
数据
或
id
(二)
上篇讲到了
mysql
8.0如何获取其及其所有
子孙
的
数据
或
id
,现在来讲5.7的。
吐槽一下,原来公司老大跟我说用的是
mysql
8.0 ,然后项目部署上线后才知道是5.7,高版本到低版本总有语法不兼容的东西,所以 WITH RECURSIVE cte 用不了了。
查询
了很多资料
mysql
8.0递归只能用存储函数了。
##在创建存储函数前最好执行下这条代码,网上说开启了bin-log,不然可能会
出
现This function has none of D