查找树中的所有非空类别

时间:2010-08-31 19:09:20

标签: php mysql tree

我有一个类别表设置为[id,name,parent_id]和items表[id,name,category_id,visible]。我正在尝试做的是创建一个查询,它将返回所有非空类别的所有ID,非空是因为它或其中一个孩子至少有一个属于它的项目。在MySQL中执行此操作的最佳方法是什么?

修改

SELECT DISTINCT category_id FROM Items

这适用于包含项目的类别,但我还需要包含所有项目的类别的父类别。此查询将与其他一些过滤器一起用作子查询。

顶级类别

- >第二级别类别

- >第三级类别

--->第1项

--->第2项

2 个答案:

答案 0 :(得分:1)

所有非空类别,只有那些具有category_id指向它们的项目,因此您只需从项目表中选择category_id

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

我不确定它是否有用,但你可以试试。

答案 1 :(得分:1)

可能偏离主题,但我认为仍值得参考:Extensive Article on Managing Hierarchical Data in MySQL