parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Ответ

Misha v.3 12.11.2008 12:57

если у вас есть только id и parent_id то вариантов собственно всего два:

1. достать всё, и на основании указанного id/parent_id рекурсивно найти всех наследников
2. рекурсивно доставать по одному уровню

какой из этих методов будет быстрее сильно зависит от данных.
например если у вас в дереве 5000 объектов, а средняя глубина 3-5, то скорее всего второй метод будет работать быстрее.

если в дереве всего 100 объектов, то скорее всего быстрее будет работать доставание всего списка объектов.


чтобы ускорить задачи доставания списка наследников существуют разные стратегии, которые подразумевают хранение в дереве доп. информации. этих стратегий не так много (основных вроде 4, плюс небольшие вариации), и все они тут уже обсуждались и ссылки на их подробные описания приводились.


если же вопрос был не про общий подход выбора наследников из БД, а про парсерный алгоритм обхода всех наследников в дереве, то я не вижу глобальных косяков, особенно учитывая тот факт, что всё это уже описано в примерах :)

а по мелочам то:
- я бы символом ',' рулил бы не в cTreePrintItem, а в cTreePrintElementsByParent
- я бы всё таки создал бы локальные переменные для таблиц уровня. глубокие хеш-лукапы в циклах не ускоряют эти самые циклы
- SELECT * я бы в жизни не написал