powered by simpleCommunicator - 2.0.35     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Иерархические запросы
3 сообщений из 3, страница 1 из 1
Иерархические запросы
    #39507089
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть запрос.
После его выполнения все элементы в таблицы выстраиваются в порядке развернутого дерева, на каждом уровне (бранче) дерева действует сортировка по имени. Всё круто работает, все элементы расположены под своими родителями и отсортировоны в каждой ветке
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
WITH RECURSIVE heir (F_KEY, F_PARENT, F_NAME, lvl) AS 
(
	SELECT root.F_KEY, root.F_PARENT, root.F_NAME, 0 as lvl
	FROM MY_TABLE_NAME AS root
	WHERE F_PARENT < 0
	UNION ALL
	SELECT child.F_KEY, child.F_PARENT, child.F_NAME, heir.lvl + 1
	FROM MY_TABLE_NAME AS child
	INNER JOIN heir ON child.F_PARENT = heir.F_KEY
	WHERE child.F_PARENT >= 0
	ORDER BY F_NAME ASC
)
SELECT F_KEY, F_PARENT, F_ORDER, F_NAME, lvl, SUBSTR('--------------------------', 0, heir.lvl * 3) || F_NAME as F_NAME_EX FROM heir

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

Поле F_NAME_EXT должо выглядеть след. образом
Для ORDER BY F_NAME ASC
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
A
-АА
-ББ
--ААА
--БББ
--ВВВ
-ВВ
Б
-АА
-ББ
-ВВ
В
-АА
-ББ
-ВВ

Для F_NAME DESC

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
В
-ВВ
-ББ
-АА
Б
-ВВ
-ББ
-АА
А
-ВВ
-ББ
--ВВВ
--БББ
--ААА
-АА
...
Рейтинг: 0 / 0
Иерархические запросы
    #39507137
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если делать сортировку по F_KEY то работает в обоих направлениях.. А по F_NAME не работает.

В конечном запросе выборке из WITH поле F_ORDER лишнее, прошу прощения
...
Рейтинг: 0 / 0
Иерархические запросы
    #39507192
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это задача для клиента а не сервера. В GUI сортировать проще.

Если очень хочется сортировать в select - сортируй по двум полям, оно и не будет "разваливаться", и если мой хрустальный шар не врет, то у тебя натуральная сортировка по F_KEY совпадает с тем что ты хочешь увидеть в итоге. Сортировать надо по (имя, мя_родителя)

Если хочешь более конкретной помощи с запросом: http://www.sql.ru/forum/983207/kak-prosit-pomoshhi-s-zaprosom
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Иерархические запросы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]