[英]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.