Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Поиск листьев в рекурсивном дереве


Автор: Majesty 3.3.2011, 08:04
Есть рекурсивное дерево id -> parentid.
Нужно написать функцию или процедуру, которая бы возвращала все листья для определённого узла. Т.е. я задаю узел где-то в середине дерева, процедура пробегает по дереву и находит все узлы, которые не являются чьими-либо родителями.
Код

DROP FUNCTION IF EXISTS get_leaves//

CREATE FUNCTION get_leaves (p_parent INT) RETURNS INT
BEGIN
    DECLARE p_done INT DEFAULT 0;
    DECLARE cur CURSOR FOR SELECT id FROM dle_category WHERE parentid=p_parent;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET p_done=1;

    OPEN cur;
    read_loop: LOOP
        FETCH cur INTO p_parent;
        IF p_done THEN
            LEAVE read_loop;
        END IF;
        SELECT get_leaves(p_parent);
    END LOOP;
    CLOSE cur;
END//
Говорит, что не может вернуть сет из функции. Как сделать правильно? smile
Если преобразую функцию в процедуру она работает, но возвращает пустой набор :(
ЗЫ: Переход на другую структуру дерева - не вариант.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)