Восстановление структуры Nested Sets

BestOfCats

Новичок
Восстановление структуры Nested Sets

Есть любимый Nested Sets, который развалился, а именно развалились лефт и райт ключи. Восстановить можно используя наличие поля с парентом. Но вот засада, при попытке восстановить нифига не получается. Есть ли готовая функция или класс для восстановления. Причина "разъезда" левой и правой границы проиошли из-за неверных вставок. Если есть готовая функция для восстановления, её даже не плохо было бы разместить куда-нибудь в общий доступ, так как очень часто встречал такие проблемы уже на работающих проектах, после попытки модификации структуры.

Заранее благодарен.
 

Wicked

Новичок
рекурсивная функция префиксного обхода дерева с расставлением левых и правых ключей пишется за час
 

BestOfCats

Новичок
Автор оригинала: Wicked
рекурсивная функция префиксного обхода дерева с расставлением левых и правых ключей пишется за час
Да, спасибо, кой чего написал тут минут за 10, вроде встало всё на свои места. может вместе проверим мою функцию?
PHP:
function pp(){
	mysql_connect(DBSERVER,DBUSER,DBPASS);
	mysql_select_db(DBNAME);
	$sql='update FAT set cat_left=0,cat_right=0';
	$ds=mysql_query($sql);
	$sql='update FAT set cat_left=1,cat_right=2 where ID=1';
	$ds=mysql_query($sql);
	$sql='select * from FAT where Level>0 order by ABSPath asc'; 
	$ds=mysql_query($sql);
	$level=0;
	$last[0]=1;
	while ($row=mysql_fetch_array($ds)) {
		$rowparent=mysql_fetch_array(mysql_query('select * from FAT where ID='.$last[($row['Level']-1)]));
			$sql='UPDATE FAT SET cat_right = cat_right + 2, cat_left = IF(cat_left > '.$rowparent['cat_right'].', cat_left + 2, cat_left) WHERE cat_right >= '.$rowparent['cat_right'];
			mysql_query($sql);
			$sql='UPDATE FAT SET cat_left='.$rowparent['cat_right'].',cat_right='.($rowparent['cat_right']+1).' where ID='.$row['ID'];
			mysql_query($sql);
			$last[$row['Level']]=$row['ID'];
	}
	exit('Готово');
}
где ABSPath - абсолютный URL страницы

P.S. Прошу проверить, ибо лежу с температурой в 38, а заказчики не дремлют.
P.P.S. Может такую вещицу нужно добавить в готовый класс для работы с деревом?
 

BestOfCats

Новичок
Найч, спасибо. Хорошая функция, даже в стандартные функции добавил.
 
Сверху