|
Модераторы: skyboy |
|
polin11 |
|
||||
Шустрый Профиль Группа: Участник Сообщений: 122 Регистрация: 6.6.2015 Репутация: нет Всего: нет |
Использую postgresql. Есть иерархическая таблица, поле с иерархией parent_id, нужно заполнить level - уровень вложенности, hier - строка с названиями родителями (исключая корень таблицы), root - значения корня иерархии (если у предка в поле new_root = true, то у потомков в поле root должен быть id этого предка).
Пример можно посмотреть https://www.db-fiddle.com/f/ezdc4n5ivhHrHk6rDJgZUo/0
Написал запрос:
Посоветуйте, как можно улучшить запрос??? |
||||
|
|||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 453 |
Господи, подзапросы-то зачем???
Покажите требуемый вывод (непонятно, что должно получиться в поле hier...) -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
polin11 |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 122 Регистрация: 6.6.2015 Репутация: нет Всего: нет |
см. скрин, как это сделать без подзапросов, ведь hier формируется как скленые через # название всех родителей (кроме корня иерархии)?
Это сообщение отредактировал(а) polin11 - 10.6.2019, 17:45 Присоединённый файл ( Кол-во скачиваний: 12 ) ИТОГ.png 26,68 Kb |
|||
|
||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 453 |
Почему для ID=7 и ID=8 значение root равно 5, а для всех остальных 1?
Почему "Планета Земля" не включается в hier? Что за поле new_root? -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Zloxa |
|
|||
Чо? Профиль Группа: Завсегдатай Сообщений: 3470 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
А что именно вас не устраивает в том запросе, который вы просите улучшить? -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
Zloxa |
|
||||
Чо? Профиль Группа: Завсегдатай Сообщений: 3470 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
Это сообщение отредактировал(а) Zloxa - 11.6.2019, 00:07 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
||||
|
|||||
polin11 |
|
||||
Шустрый Профиль Группа: Участник Сообщений: 122 Регистрация: 6.6.2015 Репутация: нет Всего: нет |
Поле new_root - логическое поле, если значение True, то у всех потомком этого узла должно быть значение root = id этого узла, а не корня иерархии, поэтому для ID=7 и ID=8 значение root равно 5, а для всех остальных 1 Почему "Планета Земля" не включается в hier, потому что такое требование задачи Добавлено через 5 минут и 2 секунды
1) рекурсивные запросы для меня пока темный лес 2) хочется отказаться от вложенных запросов в рекурсивной части 3) на больших таблицах, запрос выполняется в таком виде медленно |
||||
|
|||||
Zloxa |
|
|||
Чо? Профиль Группа: Завсегдатай Сообщений: 3470 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
При этом Вы не озвучили ни одного вопроса по механике работы рекурсивных запросов. Чем мы можем Вам тут помочь? Хочется... казалось бы какая нам *тут* разница чего *там* кому хочется? выполняйте на маленьких. Я к тому, что есть некие правила этики, которым, определенно стоит следовать когда Вы обращаетесь за *помощью*. Сейчас, с моей стороны, Ваш вопрос выглядит как "Я вот тут наовнокодил, нате, гляньте, наведите порядок, исправьте, мне тут *хочется*". Вы уж простите, но при таком отношении возникает острое желание Вас взаимно обмакнуть. Однако, следует отдать Вам должное. Помимо неврнятных экзерсисов вы еще как-то попытались описать стоящую перед Вами задачу, подготовили тестовый набор данных, показали ожидаемый результат, подготовили фидл. Это, безусловно, делает Вам огромную честь. По предложенному мною решению у Вас какие-то комментарии, вопросы, замечания? Хотя бы вежливое "спасибо", нет? -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
polin11 |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 122 Регистрация: 6.6.2015 Репутация: нет Всего: нет |
Я допустил неточность в описании результата, оказывается у корня иерархии Планета Земля поле root должно быть null, я ваш запрос подправил.
Ваш запрос намного логичнее и понятнее моего первоначального. Большое спасибо за помощь новичку в понимании языка SQL!!!
|
|||
|
||||
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |