2010-08-31 22 views
0

我有一個設置爲[id,name,parent_id]和項目表[id,name,category_id,visible]的類別表。我想要做的是創建一個查詢,它將返回所有非空類別的所有id,非空的是它或其中一個子項至少有一個屬於它的項目。在MySQL中執行此操作的最佳方式是什麼?查找樹中的所有非空類別

編輯

SELECT DISTINCT CATEGORY_ID從裝備

這適用於含項目類別,但我還需要包含類的項目的父類。此查詢將與其他一些過濾器一起用作子查詢。

頂級類別

- >二級類別

- >第三級分類

--->項目1

--->項目2

回答

1

所有非空類別,只有那些,有category_id指向他們的項目,因此,您可以從項目ta中選擇category_id s竹葉提取:

SELECT DISTINCT category_id FROM Items 

據我所知,你不能在一個查詢中選擇這些類別中的所有祖先,但您可能需要使用另一個樹模型。

隨着nested set model,您的查詢看起來是這樣的:

SELECT DISTINCT c.id FROM Categories c JOIN Items ON c.id = category_id JOIN Categories ancestors ON c.lft BETWEEN ancestors.lft AND ancestors.rgt 

我不知道這是否會工作,但你可以試試。

+0

真正的問題是遞歸查詢。您的答案不會返回其子類別包含項目的類別。 – bbadour 2010-08-31 19:25:28

+0

哦,你說得對。但是,儘管返回他們的父母可以完成,但是返回所有祖先不能用一個查詢來完成。 – Mewp 2010-08-31 19:30:36

+0

我已經更新了我的答案,提出了另一種方法。 – Mewp 2010-08-31 19:45:04