我有一个类别表设置为[id,name,parent_id]和items表[id,name,category_id,visible]。我正在尝试做的是创建一个查询,它将返回所有非空类别的所有ID,非空是因为它或其中一个孩子至少有一个属于它的项目。在MySQL中执行此操作的最佳方法是什么?
修改
SELECT DISTINCT category_id FROM Items
这适用于包含项目的类别,但我还需要包含所有项目的类别的父类别。此查询将与其他一些过滤器一起用作子查询。
顶级类别
- >第二级别类别
- >第三级类别
--->第1项
--->第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。