gpt4 book ai didi

mysql - 获取递归父列表

转载 作者:可可西里 更新时间:2023-11-01 06:28:35 24 4
gpt4 key购买 nike

使用 MySQL,我想从具有这样的字段结构的表中返回 parent 列表。 ID,PARENTID,NAME(标准的父子层次结构)。我想“向上”遍历树以返回所有“ parent ”的列表。

我意识到“嵌套集”可能是处理此问题的更好方法 - 但目前我无法更改数据结构。我希望将来这样做。目前 - 我的数据集实际上将包含几个深度级别 - 没有什么疯狂的......可能是 2-5,所以我的递归命中不应该“太昂贵”。

我查看了 SQL Server get parent list 中提供的解决方案- 但是这个语法在 mySQL 中爆炸...

有没有人有如何做到这一点的例子?

@kevin - 感谢链接 - 但我仍然遇到错误。 (“每个派生表都必须有自己的别名”)

这是我所做的(修改了文章上方的语法形式 - 以“适应”MySQL) - 我显然错过了一些东西......

SELECT parents.*
FROM (
SELECT taskID, task, parentID, 0 as level
FROM tasks
WHERE taskidID = 9147
UNION ALL
SELECT taskID, task, parentID, Level + 1
FROM tasks
WHERE taskID = (SELECT parentID FROM parents ORDER BY level DESC LIMIT 1)
)

想法???

示例:

ID      PARENTID    NAME
9146 0 thing1
9147 0 thing2
9148 9146 thing3
9149 9148 thing4
9150 0 thing5
9151 9149 thing6

查询“thing3”的 parent 返回 "9148,9146"

查询“thing6”的 parent 返回“9149,9148,9146,0”

最佳答案

在这里,我为你做了一个小功能,我在我的数据库(MAMP)中检查过它,它工作正常

use mySchema;
drop procedure if exists getParents;

DELIMITER $$
CREATE PROCEDURE getParents (in_ID int)
BEGIN
DROP TEMPORARY TABLE IF EXISTS results;
DROP TEMPORARY TABLE IF EXISTS temp2;
DROP TEMPORARY TABLE IF EXISTS temp1;

CREATE TEMPORARY TABLE temp1 AS
select distinct ID, parentID
from tasks
where parentID = in_ID;

create TEMPORARY table results AS
Select ID, parentID from temp1;

WHILE (select count(*) from temp1) DO
create TEMPORARY table temp2 as
select distinct ID, parentID
from tasks
where parentID in (select ID from temp1);

insert into results select ID, parentID from temp2;
drop TEMPORARY table if exists temp1;
create TEMPORARY table temp1 AS
select ID, parentID from temp2;
drop TEMPORARY table if exists temp2;

END WHILE;


select * from results;

DROP TEMPORARY TABLE IF EXISTS results;
DROP TEMPORARY TABLE IF EXISTS temp1;

END $$
DELIMITER ;

此代码将返回所有父级到任何深度。您显然可以在结果中添加任何其他字段

像这样使用它

call getParents(9148)

例如

关于mysql - 获取递归父列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7569399/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com