Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск листьев в рекурсивном дереве 
:(
    Опции темы
Majesty
Дата 3.3.2011, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 20.3.2005
Где: Almaty, Kazakhsta n

Репутация: нет
Всего: нет



Есть рекурсивное дерево 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
Если преобразую функцию в процедуру она работает, но возвращает пустой набор :(
ЗЫ: Переход на другую структуру дерева - не вариант.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0621 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.