Помогите выбрать самых нижних потомков.

A-Lex[FM]

Web/Highload/DataScience
Помогите выбрать самых нижних потомков.

Есть таблица с несколькими тысячами записей.

CREATE TABLE `cat` (
`id` int(11) NOT NULL auto_increment,
`parent_id` int(11) NOT NULL default '0',
`title` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`),
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COMMENT='дерево каталога'

Нужно выбрать самых нижних потомков для какого-либо id.

Можно ли это сделать одним запросом?

Сейчас я забираю весь каталог и оббегаю его.
 

Wicked

Новичок
прилефтджоини таблицу as `children` саму к себе по условию (`cat`.`id` = `children`.`parent_id`) и ищи те строки, у которых правая часть будет is null.

Только не забудь сначала добавить индекс на parent_id - он может понадобиться.
 

A-Lex[FM]

Web/Highload/DataScience
неподходит, так я их найду, но мне надо знать для любой верхней категории список самых последних потомков. например id=1, а вложенность 5 уровней, тогда по запросу
SELECT c.id, c.parent_id, i.id FROM cat AS c LEFT JOIN cat AS i ON c.id=i.parent_id WHERE c.id=1 ORDER BY c.id
я не получу то что надо, а джоинить таблицу исходя из уровня вложенности нерационально

-~{}~ 28.08.07 14:13:

всем спасибо, проблема решилась одним join'ом и рекурсивным обходом результатов запроса :)
 
Сверху