запросить получение дочерних категорий и узнать, есть ли у дочерних категорий собственные дочерние категории - PullRequest
1 голос
/ 06 ноября 2011

У меня есть таблица cat со следующими столбцами:

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

Эта таблица имеет тысячи категорий, но это общая структура.

Когда пользователь выбирает верхкатегория уровня У меня есть запрос, чтобы получить его детей следующим образом:

SELECT * FROM cat WHERE parent = $id

Моя проблема в том, что мне нужно знать, есть ли у этих категорий детей собственные дети.

Я мог бы сделатьЗацикливайтесь на результатах и ​​выполняйте запрос для каждой возвращаемой категории, но я надеюсь, что есть решение, в котором я могу использовать только один запрос, может быть, для этого потребуется подзапрос?

Спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 06 ноября 2011

Вы можете использовать подзапрос, чтобы проверить, есть ли дочерние узлы:

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
1 голос
/ 06 ноября 2011
select *, (select COUNT(*) from cat c2 where c2.parent_id = c1.cat_id)  
from cat c1

Столбец счетчика будет ненулевым, если есть подкатегории.

...