簡體   English   中英

自聯接以在mysql中獲得最大深度

[英]Self join to get maximum number of depth in mysql

我在使用mysql進行多級頁面查詢時遇到問題。

我的表結構是這樣的。 表名稱為“ default_pages”

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

我的查詢是

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

但是我得到以下輸出

id      ptitle      parent     grandparent
19      ab 1        18         null
21      ab 2        18         null

所需的輸出應為

id      ptitle      parent     grandparent
19      ab 1        18         null
21      ab 2        18         null
22      sub 1       21         18
23      sub 2       22         21

不幸的是,MySQL不直接支持分層查詢或遞歸查詢,因此您必須使用固定數量的多個聯接(或使用存儲過程)來實現這一點。 我認為您想在所有父ID中檢查18

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);

錯誤在於您的where子句中,它將結果限制為parent_id = 18的所有行。相反,似乎您希望所有具有父項的行。 這應該工作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM