Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 20:54 25.06.24 
Клубове/ Компютри и Интернет / Бази данни Пълен преглед*
Информация за клуба
Тема MYSQL5 - stored procedure - traversal trees
АвторFEX (Нерегистриран) 
Публикувано05.10.06 16:26  



Здравейте,
може ли някой да ни помогне в следната ситуация за обходжане и билдване на траверсно дърво със рекурсивно извикване на съхранена процедура (функция)

Имаме таблица с категории:
=======================================================
CREATE TABLE `objects` (
`ID` int(11) unsigned NOT NULL auto_increment,
`PARENT_ID` int(11) default NULL,
`Name` varchar(63) NOT NULL,
`Num` int(11) NOT NULL default '0',
`lft` int(11) unsigned default NULL,
`rgt` int(11) unsigned default NULL,
`lvl` int(11) NOT NULL default '0',
PRIMARY KEY (`ID`),
KEY `IDX_objects_by_PARENT_ID` (`PARENT_ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO objects(ID, PARENT_ID, Name, Num) VALUES(1, NULL,'Main',1), (2, NULL, 'News',2), (3,2,'Events',1), (4,2,'Other',2), (5,3,'Future',1), (6,3,'Past',2);

CREATE FUNCTION `SP_rebuild_category_tree`(_parent INTEGER(11), _left INTEGER(11), _level INTEGER(11))
RETURNS int(11)
DETERMINISTIC
SQL SECURITY INVOKER
COMMENT 'Building traversal tree'
BEGIN
DECLARE _right INT;
DECLARE _id INT;

DECLARE done INT DEFAULT 0;
DECLARE c CURSOR FOR
SELECT ID
FROM objects
WHERE
CASE
WHEN _parent IS NULL THEN PARENT_ID IS NULL
ELSE PARENT_ID = _parent
END
ORDER BY num;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done := 1;

SET _right := _left + 1;

OPEN c;

REPEAT
FETCH c INTO _id;
IF done = 0 THEN
SET _right := SP_rebuild_category_tree(_id, _right, _level+1);
END IF;
UNTIL done = 1 END REPEAT;

CLOSE c;

IF (_parent IS NOT NULL) THEN
UPDATE objects SET lft=_left, rgt=_right, lvl=_level WHERE ID=_parent;
END IF;

RETURN _right + 1;
END;

=======================================================
Проблемът е, че при извикване на функцията:
SELECT SP_rebuild_category_tree(NULL,0,0);
не влиза в рекурсия, не намерихме начин за репортване на статус съобщения, аналогично като в PostGreSQL RAISE NOTICE....,

Any ideas?



Цялата тема
ТемаАвторПубликувано
* MYSQL5 - stored procedure - traversal trees FEX   05.10.06 16:26
. * RESHENIE ;) FEX   05.10.06 16:54
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.