2013-08-17 3 views
0

Я получил эту таблицу:MySQL работает с деревьями

CREATE TABLE 'category' (
    'id' INT(11) NOT NULL AUTO_INCREMENT, 
    'parent_category_id' INT(11) NULL DEFAULT NULL, 
    'name' VARCHAR(100) NOT NULL, 
    PRIMARY KEY ('id'), 
    INDEX 'parent_category_id' ('parent_category_id'), 
    CONSTRAINT 'category_ibfk_1' FOREIGN KEY ('parent_category_id') REFERENCES 'category' ('id') 
) COLLATE='utf8_general_ci' ENGINE=InnoDB; 

Как выбрать категории, которые имеют менее 3 подкатегорий (нет глубины), и как выбрать категории, которые не имеют дочерних элементов. Спасибо!

ответ

1

менее трех:

select parent.* 
from category parent left outer join 
    category child 
    on parent.id = child.parent_category_id 
group by parent.id 
having count(child.id) < 3 

Для каких-либо категорий:

select parent.* 
from category parent left outer join 
    category child 
    on parent.id = child.parent_category_id 
where child.id is null 
+0

Он считает, сколько элементов категория содержит, не подкатегорий. Или я что-то не понял? – zogby

+0

@zogby. , , Я считаю, что это отвечает на ваш вопрос. Возможно, вы должны отредактировать свой вопрос с некоторыми примерами данных, если я что-то упустил. –

+0

Извините, ваш ответ правильный – zogby