2017-07-01 184 views
1

這是一個類別表,如何獲得與某個類別相關的所有子類別,而不必知道它有多深。

CREATE TABLE `categories` (
    `id` int(11) NOT NULL, 
    `name` varchar(50) DEFAULT NULL, 
    `parentid` int(11) DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

這是你如何讓類別和相關的子類別。

SELECT root.name AS root_name 
    , down1.name AS down1_name 
    , down2.name AS down2_name 
    FROM categories AS root 
LEFT OUTER 
    JOIN categories AS down1 
    ON down1.parentid = root.id 
LEFT OUTER 
    JOIN categories AS down2 
    ON down2.parentid = down1.id 

WHERE root.parentid IS NULL 
ORDER 
    BY root_name 
    , down1_name 
    , down2_name 

SQLfiddle

我所注意到的是,這個查詢只能進入2步/節點推進,好比說

category > sub-category 1 > sub-category 2 

如果我有一個子類超越2步/ nodes like say

category > sub-category 1 > sub-category 2 > sub-category 3 

甚至可能是子類別4我需要添加down3.nam e還是down4.name來結束包含所有子類別還是有更好的方法?

+0

你不能真的在MySQL中。您有兩個選擇:更改層次結構的表示形式或使用遞歸存儲過程。 –

+0

[如何創建MySQL分層遞歸查詢]的可能重複(https://stackoverflow.com/questions/20215744/how-to-create-a-mysql-hierarchical-recursive-query) – krokodilko

回答

0

您可以使用遞歸查詢獲取項目的完整層次結構。

例如:

select c.id,c.name,@parent := c.parentid 
from 
(select * from categories order by id desc) c 
join 
(select @parent := 16) t 
where c.id [email protected] 

創建一個存儲過程以獲得用於所有項ID以遞歸方式所需的輸出。

相關問題