Я использую модуль PostgreSQL Ltree для хранения иерархических данных. Я хочу получить полную иерархию, отсортированную по определенному столбцу.
Рассмотрим следующую таблицу:
votes | path | ...
-------+-------+-----
1 | 1 | ...
2 | 1.1 | ...
4 | 1.2 | ...
1 | 1.2.1 | ...
3 | 2 | ...
1 | 2.1 | ...
2 | 2.1.1 | ...
4 | 2.1.2 | ...
... | ... | ...
В моей текущей реализации я бы запросил базу данных с помощью SELECT * FROM comments ORDER BY path
, который вернет все дерево:
Node 1
-- Node 1.1
-- Node 1.2
---- Node 1.2.1
Node 2
-- Node 2.1
---- Node 2.1.1
---- Node 2.1.2
Однако я хотите отсортировать по голосам
(а не по id
, к чему сводится сортировка по пути
). Каждый уровень глубины должен быть независимо отсортирован, при этом правильная древовидная структура должна оставаться неизменной. Что-то, что вернет следующее:
Node 2
-- Node 2.1
---- Node 2.1.2
---- Node 2.1.1
Node 1
-- Node 1.2
---- Node 1.2.1
-- Node 1.1
Postgres ' WITH RECURSIVE
может быть подходящим, но я не уверен. Есть идеи?