Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2019, 23:18   #1
agentmax1316
Новичок
Джуниор
 
Регистрация: 13.02.2019
Сообщений: 1
По умолчанию Иерархический запрос с загадкой

Есть таблица:
ZlIo2.png

Рекурсивный запрос

Есть 3 типа описания столбца "Title": 1. Страна (Type_id = 1); 2. Область / Штат (Type_id = 2) 3. Город (Type_id = 3)

Нужно каким-то образом извлечь все те города, которые относятся к стране. Например, выбрали "Красногорск", то результат должен вывести все города: Балашиха, Дмитров, Красногорск, Чудово, Валдай.

Есть мысль как сделать:

Parent_Id зависит от Id.

Красногорск (Type_id = 3) имеет Parent_id = 2. Исходя из этого уже смотрим на строку под этим Id = 2: Московская область (Type_id = 2), исходя из этого ищем уже строку с Id = 1: Россия (Type_id = 1). И если ParentId IS NULL, тогда прекратить поиск и вывести полный список городов России.

Не могу представить как это реализовать.

Подскажите пожалуйста, спасибо.
agentmax1316 вне форума Ответить с цитированием
Старый 14.02.2019, 08:34   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,149
По умолчанию

в общем случае никак (для произвольного уровня вложенности).. либо очень сложно (хранимку писать)
если уровень вложенности максимально = 3 как в примере
то можно - несколько джойнов на самого себя и готово

Если всегда вводится город - и надо получить все города в этой-же стране, то как то так
Код:
SELECT t0.* FROM table AS t
  LEFT JOIN table AS t0 ON t0.parent_id=t.id
 WHERE t.parent_id= (SELECT parent_id FROM table AS t1
    LEFT JOIN table AS t2 ON t2,parent_id = t1.id
     WHERE t2.title='Красногорск)
 GROUP BY t0.id
накидал на коленке - не проверял

Последний раз редактировалось ADSoft; 14.02.2019 в 08:37.
ADSoft вне форума Ответить с цитированием
Старый 14.02.2019, 08:49   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

А СУБД какая? Например оракл и сиквел поддерживают иерархические запросы
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Иерархический список для агрегации в Universe Designer IFRSoff Помощь студентам 1 29.07.2015 18:24
иерархический справочник. как организовать и реализовать? lev-1985 Microsoft Office Access 2 18.05.2014 19:36
Иерархический список в DBGridEh Екатерина20 БД в Delphi 25 24.05.2012 21:08
Иерархический список (таблица)??? Timbiz Microsoft Office Excel 16 18.02.2010 20:51
Иерархический список tanka123 JavaScript, Ajax 0 21.12.2009 05:48