【问题标题】:query to get child categories AND know if child categories have child categories of their own查询以获取子类别并知道子类别是否有自己的子类别
【发布时间】:2011-11-05 21:00:11
【问题描述】:

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

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

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

当用户选择顶级类别时,我有一个查询来获取其子项,如下所示:

SELECT * FROM cat WHERE parent = $id

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

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

感谢您的帮助。

【问题讨论】:

标签: mysql sql subquery hierarchical-data categories


【解决方案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

【讨论】:

    【解决方案2】:
    select *, (select COUNT(*) from cat c2 where c2.parent_id = c1.cat_id)  
    from cat c1
    

    如果有子类别,计数列将非零。

    【讨论】:

    • +1 执行exists 子查询可能会更高效,让数据库知道您只关心是否有孩子,而不是孩子的数量
    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    相关资源
    最近更新 更多