首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >树MySQL8 / MariaDB10中的递归查询

树MySQL8 / MariaDB10中的递归查询
EN

Stack Overflow用户
提问于 2021-02-06 09:26:11
回答 1查看 44关注 0票数 1

我在我的数据库中有一个树状的分类结构:

代码语言:javascript
复制
create table cat(
     id int auto_increment primary key,
     url varchar(50),
     parent int references cat(id)
)

如何通过连接类别的URL和父url来构建类别的url?(直到parent不为空)

我使用的是MariaDB 10.2

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-06 09:32:46

这个递归的CTE将在表中的每个级别形成一个URL,并使用一个/将它们连接起来(尽管这很容易更改)。所需的最终节点在CTE中指定(在本例中为7):

代码语言:javascript
复制
WITH RECURSIVE urls AS (
  SELECT url, parent
  FROM cat
  WHERE id = 7
  UNION ALL
  SELECT CONCAT_WS('/', cat.url, urls.url), cat.parent
  FROM urls
  JOIN cat ON cat.id = urls.parent
)
SELECT CONCAT('http://', url) AS url
FROM urls
WHERE parent IS NULL

Demo on dbfiddle

您可以通过从CTE中省略WHERE id =条件来获取所有可用路径。对于我的样本数据,这提供了:

代码语言:javascript
复制
url
http://home
http://home/apps
http://home/user
http://home/apps/excel
http://home/apps/word
http://home/user/nick
http://home/user/nick/docs

Demo on dbfiddle

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66072707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档