2012-03-15 51 views
2

我有一個包含類別的表格,其中類別可以有一個parentid(是其他類別的子項)。當我想過濾父類別ID上的項目時,我希望查詢包含所有子類別。mysql查詢;選擇類別樹中的所有項目

可以說我有這一類結構:

id || title  || parentid 
1 || Sports || 0 
2 || Tennis || 1 
3 || Wimbledon || 2 

現在我在溫網類的文章。我想顯示類別運動中的所有文章。

SELECT item.* FROM #table_items AS item WHERE item.catid = 1; 

以上查詢不會返回Wimbledon類別中的文章。這可能嗎?

+0

你的孩子在哪裏btw ..? – Teja 2012-03-15 15:32:35

+0

在Oracle中,您有CONNECT BY PRIOR,但我不認爲MySQL支持此操作 – 2012-03-15 15:33:50

回答

0

我得到了我正在尋找的解決方案。假設我想要顯示ID爲12的類別中的所有項目:

SELECT item.* FROM #table_items AS item 
LEFT JOIN #__foc_shop_categories AS cat1 ON (cat1.id = item.catid) 
LEFT JOIN #__foc_shop_categories AS cat2 ON (cat1.parentid = cat2.id) 
... (and so on for more depth) 

WHERE (cat1.id = 12 OR cat2.id = 12 OR ...) 
GROUP BY item.id 

它會生成類別和嵌套類別中的所有項目。

0
SELECT item.* FROM #table_items AS item,#categories as catg 
WHERE item.parentid = cat.parentid; 
+0

不起作用...項目表有一個字段'catid',它引用了一個類別。 – Bert 2012-03-15 15:49:36

+0

可以發佈你的兩個表的一些樣本數據... – Teja 2012-03-15 15:58:59

+0

表項有字段id || title || catid,其中catid鏈接到類別表中的id字段。 – Bert 2012-03-16 07:58:05

相關問題