Восстановление целостности дерева Nested Sets

GeT

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

Возникла такая проблема. В результате какого-то необъяснимого фактора после второй сотни узлов в дереве, оно потеряло целостность.
Структура дерева:
id || left || right || parent || level

Есть ли какой-то способ восстановить целостность дерева?

P.S. В поиске смотрел, там куча способов _проверки_ на целостность (я ее и сам могу сделать), но ничего по поводу того как ее восстановить.
 

Нечто

Психолог РНРClub
Т.к. есть родитель и даже уровень, просто берем и строим по ним дерево заново.
 

GeT

Новичок
Нечто
Щас попробуем.

P.S. Я сам писал класс для дерева, потому мог где-то ошибиться. Из-за чего обычно возникают такие проблеммы? Где копать?
Странно, что тестили 100 раз - все работало отлично, а тут вдруг раз - и потеряло целостность...

-~{}~ 14.06.05 17:06:

Хм...Что-то пока не смог придумать нормальный алгоритм для того чтобы "построить заново".
Как это выглядит?

-~{}~ 14.06.05 17:56:

Кароче, я сделал по-тупому.
Посто создал временную таблицу, дальше запросом считал дерево с сортировкой по левелу и в цикле сделал insert'ы.
Затем просто проапдейтил left и right в исходной таблице.
Получилось 1000 запросов, но зато работает :D
 

Нечто

Психолог РНРClub
Ну можно и так =)
Поставь на left и right уникальные индексы и посмотри, что происходит при множестве вставок. Возможно, придется лочить таблицу при обновлении.
 

ONK

Пассивист PHPСluba
GeT, если в скрипте ошибок нет, то такое может быть при параллельном выполнении процедур модификации структуры дерева. В качестве решения можно предложить организацию программной очереди на модификацию.
 

GeT

Новичок
ONK
Да, нумаю скорее всего из-за этого.
Ну, буду пробовать ее залочить.

В скрипте ошибок нет - 100%, тестили много.
 
Сверху