Получение и отображение дерева.
Есть база данных PostgreSQL в которой есть таблица location из 4-х полей id, parent_id, name, type. Как из этого следует дерево задается путем указаний ссылок на родителя.
Необходимо отображать дерево в таком виде:
Корень
- первый уроверь 1
-- второй уровень
- первый уровень 2
-- второй уровень.
-- второй уровень.
Сейчас используется схема где для получения каждого уровня потомков в каждом поддереве применяется отдельный sql-запрос, то есть в данной схеме 5 запросов получается. каждый уровень каждого поддерева выгребается рекурсивным вызовом функции.
Как Вы понимаете экспоненциальный рост количества запросов от количества узлов в дереве это очень не хорошо...
Можно ли написать такой запрос к базе который бы выбирал данные уже в нужном порядке (то есть после после узла с уровнем N шли бы все узлы с уровнем N+1, а потом только следующий узел уровня N), чтобы для каждого узла для вывода нужно было только определить уровень вложенности, а не высчитывать в скрипте когда же нужно выводить тот или иной элемент.
Или подскажите какой тут еще можно применить тут алгоритм.
Предполагаемое количество записей около 1000.
Есть база данных PostgreSQL в которой есть таблица location из 4-х полей id, parent_id, name, type. Как из этого следует дерево задается путем указаний ссылок на родителя.
Необходимо отображать дерево в таком виде:
Корень
- первый уроверь 1
-- второй уровень
- первый уровень 2
-- второй уровень.
-- второй уровень.
Сейчас используется схема где для получения каждого уровня потомков в каждом поддереве применяется отдельный sql-запрос, то есть в данной схеме 5 запросов получается. каждый уровень каждого поддерева выгребается рекурсивным вызовом функции.
Как Вы понимаете экспоненциальный рост количества запросов от количества узлов в дереве это очень не хорошо...
Можно ли написать такой запрос к базе который бы выбирал данные уже в нужном порядке (то есть после после узла с уровнем N шли бы все узлы с уровнем N+1, а потом только следующий узел уровня N), чтобы для каждого узла для вывода нужно было только определить уровень вложенности, а не высчитывать в скрипте когда же нужно выводить тот или иной элемент.
Или подскажите какой тут еще можно применить тут алгоритм.
Предполагаемое количество записей около 1000.