Таблица структуры городов

danneo

Честный
Регистрация
13 Ноя 2007
Сообщения
1.526
Реакции
121
У объектов есть страна, регион, город. Все в трех таблицах. Это для РФ.
А если взять, например, Турцию. Там только два уровня. Турия - Анталья. А далее улица уже и дом.
При выводе списка объектов делается три запроса из каждой таблицы. Если объект в турции, то при поиске в таблице городов, находится null. И далее все рушится, ничего нет.Кроме Турции, мне кажется, будет немало стран, где подобный уровень деления.
Как можно решить такую проблему?
Была мысль сделать разную вложенность в одной таблице, как категории. Но тогда непонятно как выводить такой адрес у объекта. Если только рекурсией в БД сразу, но не выход.
 
Если делаете всё одним запросом и у вас результате 0 строк, то использовать внешнее объединение в запросе.

Если вопрос именно в получаемом значении null в поле город, то вариантов несколько.
Можно сделать запись в таблице городов к примеру со значением "отсутствует".
Можно подставить функцию, которая при получении null из поля возвращала какое-нибудь текстовое или числовое значение.
Можно сделать поле - признак в таблице со странами - выполнять запрос из третей таблицы или выдать пустую строку, а не null.
Думаю, что ещё варианты есть. Всё от логики вашего приложения зависит.
 
Если делаете всё одним запросом и у вас результате 0 строк, то использовать внешнее объединение в запросе.

Если вопрос именно в получаемом значении null в поле город, то вариантов несколько.
Можно сделать запись в таблице городов к примеру со значением "отсутствует".
Можно подставить функцию, которая при получении null из поля возвращала какое-нибудь текстовое или числовое значение.
Можно сделать поле - признак в таблице со странами - выполнять запрос из третей таблицы или выдать пустую строку, а не null.
Думаю, что ещё варианты есть. Всё от логики вашего приложения зависит.
например, вывожу все объекты... в этом же запросе делаю запрос и связку городов (join города с регионом и страной). Поэтому никак нельзя определить, откуда делать запрос, из города или региона (если города нет). Как вариант, делать как-то через MySQL if-else, но это я не умею.
Хотя, есть страны, где не регионы, а города сразу. Происходит некая подмена региона на города, если уж быть правильным.
 
Последнее редактирование:
У вас картинка в голове и она для вас очевидна, а мне её не понять. Опишите логику полностью. Что есть и что хотите получить.
Что-то для туристического бизнеса пишете ?
 
Все банально: отели, у них адреса. Отели мира. Нужна таблица с городами. Сейчас они в три таблицы разнесены (3 вложенности). Столкнулся вот с такой проблемой, что в Турции 2 уровня вложенности. А есть где и 4 вложенности бывает, например в РФ.
Вот и думаю теперь, как решить проблему.
 
Вот такие мысли посетили:
Что касается Антальи, то она относится к провинции с одноименным названием. Так-что регионы можно и там ввести.
Либо наоборот связать напрямую города со страной, а регионы сделать справочной таблицей, привязав уже к городам.
 
Как вариант добавить в таблицу стран столбец регион. Тогда для Турции в столбце регион просто будет пусто. Подчинённые адреса вязать с этой таблицей. При этом плюнуть на то, что часть данных будет задублирована (одно и то же значение страны для разных регионов). За счёт этого незначительно увеличится БД, зато будут быстрее выполняться запросы на объединение полного адреса.
 
А сейчас какие таблицы?
City - name, id_city, id_region, id_country
Region - name, id_region, id_country
Country - name, id_country
Hotel - name, id_city
Как-то так?

Если так - тогда при запросе данных отеля просто join на город, регион и страну (для турции регион будет null).
При изменении отеля - сперва достаем все страны, выбираем страну, потом регионы этой страны, если регионы пустой массив то сразу города
 
Назад
Сверху