librown
@librown
На-все-руки-мастер и немного кодер

SELECT с неизвестной заранее вложенностью?

Привет!
Есть одна таблица geo с городами, регионами, районами, странами (id, type, name, id_parent).

Пример:
1 | country  | Россия       | 0
2 | district | Крым         | 1
2 | area     | Большая Ялта | 2
3 | city     | Массандра    | 3

P. S. Вложенность не всегда 4-х уровневая, может быть просто "страна-город" или "страна-регион-город".

Как написать запрос который выберет все города зная ID страны?
  • Вопрос задан
  • 205 просмотров
Решения вопроса 1
librown
@librown Автор вопроса
На-все-руки-мастер и немного кодер
Сделал через три ЮНИОНа.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@mletov
1) На практике часто бывает, что нет нужды для универсального решения, т к известно, что глубина вложенности не может превышать некое разумное значение.
2) Если все же нужно универсально... В MS SQL есть удобная штука, CTE. В MySql ничего такого нет, поэтому погуглите "mysql recursive query"
3) Как вариант, написать хранимую функцию и в ней использовать курсор
Ответ написан
Комментировать
@Joysi75
Критично применение mysql ? В некоторых СУБД есть типы для хранения древовидных структур.
Например MSSQL (express версия free) - https://msdn.microsoft.com/en-us/library/bb677290.aspx
или обзорно тут https://habrahabr.ru/post/27774/
Ответ написан
Комментировать
@res2001
Developer, ex-admin
Я бы разбил эту одну большую таблицу на несколько (страны, населенные пункты, улицы/проспекты/..., дома/квартиры). Будет гораздо проще работать и избавитесь от многих вложенностей.
Возьмите для примера КЛАДР.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы