2012-03-15 75 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