gpt4 book ai didi

php - 递归获取 parent 姓名

转载 作者:行者123 更新时间:2023-11-29 05:47:14 27 4
gpt4 key购买 nike

我有一个如下所示的数据库:

CREATE TABLE Persons (
id int,
parentID int,
name varchar(255)
);

INSERT INTO Persons (id, parentID, name) VALUES ('1', '0', 'smith');
INSERT INTO Persons (id, parentID, name) VALUES ('2', '1', 'johnson');
INSERT INTO Persons (id, parentID, name) VALUES ('3', '2', 'spencer');
INSERT INTO Persons (id, parentID, name) VALUES ('4', '3', 'duke');

我想获取人员姓名和他们 parent 的姓名并将其放入一个数组中。然后递归地循环遍历数组以获得类似于此的输出:

smith
johnson (smith)
spencer (johnson, smith)
duke (spencer, johnson, smith)

我想在 php 和 sql 中执行此操作。

我不确定要使用的 sql 查询,我应该使用递归 CTE 吗?另外我应该如何遍历它以获得我想要的输出?

最佳答案

在 MySQL 8.0 中,您可以使用递归公用表表达式:

with recursive cte as (
select
id,
parentID,
name,
cast('' as char(500)) parents
from Persons
where parentID = 0
union all
select
p.id,
p.parentID,
p.name,
concat(c.parents, case when c.parents <> '' then ',' else '' end, c.name) parents
from Persons p
inner join cte c on c.id = p.parentID
)
select name, parents from cte

查询从树的根开始(其中 parentID = 0),然后遍历层次结构,在新列 parents 中连接继承链。

Demo on DB Fiddle :

name    | parents              :------ | :--------------------smith   |                      johnson | smith                spencer | smith,johnson        duke    | smith,johnson,spencer

关于php - 递归获取 parent 姓名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58807935/

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