首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自连接以获得mysql中的最大深度

问自连接以获得mysql中的最大深度
EN

Stack Overflow用户
提问于 2014-09-28 12:40:04
回答 2查看 543关注 0票数 0

我在使用mysql的多级页面查询时遇到了问题。

我的桌子结构是这样的。表名为“default_pages”

代码语言:javascript
复制
id        title       parent_id
18        About Us    0
19        ab 1        18
20        contact     0
21        ab 2        18
22        sub 1       21
23        sub 2       22

我的疑问是

代码语言:javascript
复制
SELECT p.id AS id, p.title AS ptitle, parent.id AS parent, grandparent.id AS grandparent 
       FROM default_pages AS p 
       LEFT JOIN default_pages AS parent ON p.parent_id = parent.id 
       LEFT JOIN default_pages AS grandparent ON parent.parent_id = grandparent.id 
       where p.parent_id = 18

但是我得到了下面的输出

代码语言:javascript
复制
id      ptitle      parent     grandparent
19      ab 1        18         null
21      ab 2        18         null

期望的输出应该是

代码语言:javascript
复制
id      ptitle      parent     grandparent
19      ab 1        18         null
21      ab 2        18         null
22      sub 1       21         18
23      sub 2       22         21
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-28 12:50:28

不幸的是,MySQL不直接支持分层查询或递归查询,因此您必须使用固定数量的多个联接(或使用存储过程)来处理这个问题。我认为您需要在所有父in中检查18:

代码语言:javascript
复制
SELECT p.id AS id, p.title AS ptitle, parent.id AS parent, grandparent.id AS grandparent 
FROM default_pages p LEFT JOIN
     default_pages parent
     ON p.parent_id = parent.id LEFT JOIN
     default_pages grandparent
     ON parent.parent_id = grandparent.id 
WHERE 18 in (p.parent_id, parent.parent_id, grandparent.parent_id);
票数 2
EN

Stack Overflow用户

发布于 2014-09-28 12:48:06

where子句中存在错误,它将结果限制在parent_id = 18的所有行。相反,您似乎需要所有具有父行的行。这应该是可行的:

代码语言:javascript
复制
SELECT p.id AS id, p.title AS ptitle, parent.id AS parent, grandparent.id AS grandparent 
       FROM default_pages AS p 
       LEFT JOIN default_pages AS parent ON p.parent_id = parent.id 
       LEFT JOIN default_pages AS grandparent ON parent.parent_id = grandparent.id 
       where p.parent_id != 0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26084930

复制
相关文章

相似问题

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