Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

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

Есть таблица:
Название: ZlIo2.png
Просмотров: 24

Размер: 16.0 Кб

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

Есть 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, 09:34   #2
ADSoft
Профессионал
 
Регистрация: 25.02.2007
Адрес: Татарстан
Сообщений: 3,401
Репутация: 914

icq: 303-206-418
skype: ad-soft.info
По умолчанию

в общем случае никак (для произвольного уровня вложенности).. либо очень сложно (хранимку писать)
если уровень вложенности максимально = 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 в 09:37.
ADSoft вне форума   Ответить с цитированием
Старый 14.02.2019, 09:49   #3
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 18,796
Репутация: 6622
По умолчанию

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Иерархический список для агрегации в Universe Designer IFRSoff Помощь студентам 1 29.07.2015 19: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 21:51
Иерархический список tanka123 JavaScript, Ajax 0 21.12.2009 06:48


10:51.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru