查询以获取子类别并了解子类别是否具有自己的子类别

时间:2011-11-05 21:00:12

标签: mysql sql subquery hierarchical-data categories

我有一个cat表,其中包含以下列:

cat_id  | name            |   parent_id
1         cat1                1
2         subcat1             1
3         subcat1-subcat      2

此表有数千个类别,但这是一般结构。

当用户选择顶级类别时,我有一个查询来让其子级像这样:

SELECT * FROM cat WHERE parent = $id

我的问题是我需要知道这些儿童类别是否有自己的孩子。

我可以对结果进行循环并对返回的每个类别进行查询,但我希望有一个解决方案,我只能使用一个查询,也许它需要一个子查询?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

select *, (select COUNT(*) from cat c2 where c2.parent_id = c1.cat_id)  
from cat c1

如果存在子类别,则count列将为非零。

答案 1 :(得分:1)

您可以使用子查询来检查是否存在子节点:

select  *
,       case 
        when exists (select * from cat c2 where c2.parent_id = c1.cat_id) then 0
        else 1
        end as HasSubcategories
from    cat c1