Как запросом вывести адрес: страна, город (mysql)

На сервере обработал и нашлась ошибка в заполнении.
Какая именно? Город не у той страны? Используйте только код города. Код страны, области - это вообще можно игнорировать, так как по этим таблицам все легко вычисляется.
То есть страны, области, города - для удобства выбора пользователя. Хранить в БД только код города.
Вот оттяпает какая-то страна у другой часть территории, и у вас неконсистентные данные будут. А с хранением только города - можно страну пересчитывать каждый раз.
 
Какая именно? Город не у той страны? Используйте только код города. Код страны, области - это вообще можно игнорировать, так как по этим таблицам все легко вычисляется.
То есть страны, области, города - для удобства выбора пользователя. Хранить в БД только код города.
Вот оттяпает какая-то страна у другой часть территории, и у вас неконсистентные данные будут. А с хранением только города - можно страну пересчитывать каждый раз.
Ну это понятно. Вопрос то не в этом был. Пользователь заполнил форму и отправил. На сервера при валидации нашлась ошибка заполнения, например, не указал название. Пользователю возвращается форма с веденными ранее данными (чтобы заново не заполнять). Дак вот ему нужно вывести выбранный им город, при этом и списки всех его родителей:
списки городов.png
И в каждом списке выводятся только нужные. Т.е. если это москва, то в областях выводятся только области России. В списке городов только города из области. Чтобы не было других городов. Как собрать такие списки?
У меня было два способа решения:
1. весь массив городов сохраняется в один большой массив в кэш-файл, затем сохраняется массив в переменную (это когда 1-2 десятка городов из одной страны).
2. все хранится в одной таблице, Как категории (описано все выше) и делается выборка из поля города (arrparentid) всех его родителей. Так формируется большой массив всех стран, областей выбранной страны и городов из выбранной области.
И в том и другом случае, дальше php строит списки.
Как это все можно сделать, если локации разбиты на три таблицы, вот этого я и не могу понять?
 
Последнее редактирование:
Как это все можно сделать, если локации разбиты на три таблицы, вот этого я и не могу понять?
Вам должна помочь эта статья --- Для просмотра ссылки Войди или Зарегистрируйся

Просто на первом шаге будете формировать список городов и областей запросами.
Ну а города добавляем зависимыми от области по аналогии.
 
Вам должна помочь эта статья --- Для просмотра ссылки Войди или Зарегистрируйся

Просто на первом шаге будете формировать список городов и областей запросами.
Ну а города добавляем зависимыми от области по аналогии.
Это не то совсем. ajax реализовано и работает.
 
название чего?

Не можете составить запрос на выборку регионов из страны, и узнать страну по городу?
Не, не хватает оперативной памяти (в голове) на подзапросы.
Получилось только собрать все регионы страны и все города страны. Не получается отфильтровать только те города, которые относятся к области выбранного города (не знаю куда чего дописать). Я так понимаю, у других областей должно быть null в городе.
Скорость 0:00:00:9 сек
Код:
SELECT
  db_country.name AS country_name,
  db_region.name AS region_name,
  db_town.name AS town_name
FROM db_region
  LEFT OUTER JOIN db_country
  ON db_country.id = db_region.countryid
  LEFT OUTER JOIN db_town
  ON db_town.regionid = db_region.id

WHERE db_region.countryid = (SELECT
  db_country.id AS country_id
  FROM db_town
  INNER JOIN db_region
  ON db_town.regionid = db_region.id
  INNER JOIN db_country
  ON db_region.countryid = db_country.id
  WHERE db_town.id = 870)

Скорость: 0:00:02:00 сек
Код:
SELECT
  db_country.name AS country_name,
  db_region.name AS region_name,
  db_town.name AS town_name
FROM db_region
  LEFT OUTER JOIN db_country
    ON db_country.id = db_region.countryid
  LEFT OUTER JOIN db_town
    ON db_town.regionid = db_region.id
    AND db_town.regionid = (SELECT regionid FROM db_town WHERE id = 870 )

WHERE db_region.countryid = (SELECT
    db_country.id AS country_id
  FROM db_town
    INNER JOIN db_region
      ON db_town.regionid = db_region.id
    INNER JOIN db_country
      ON db_region.countryid = db_country.id
  WHERE db_town.id = 870)
Как можно оптимизировать и вывести еще все страны?
 
Последнее редактирование:
Перечитал топик еще раз... Чтобы понять, а что всё таки надо...

Как я понимаю :
--- Уже реализовано - зависимые селекты с выбором страны, области и города
--- Необходимо реализовать выборку отдельно стран областей и городов.

Как правильно:
1. Должно быть три таблицы - страна, области и города и уже из них формировать нужные списки.
2. Всю вашу задачу можно реализовать по моей ссылке, если внимательно перечитать и подумать как это применить для себя.

Ну и для того чтобы Вам помочь с селектом нужно хотя бы дамп таблицы своей скинуть...
 
Перечитал топик еще раз... Чтобы понять, а что всё таки надо...

Как я понимаю :
--- Уже реализовано - зависимые селекты с выбором страны, области и города
--- Необходимо реализовать выборку отдельно стран областей и городов.

Как правильно:
1. Должно быть три таблицы - страна, области и города и уже из них формировать нужные списки.
2. Всю вашу задачу можно реализовать по моей ссылке, если внимательно перечитать и подумать как это применить для себя.

Ну и для того чтобы Вам помочь с селектом нужно хотя бы дамп таблицы своей скинуть...
Необходимо вывести списки, зная только city_id, уже настроенные так, как-будто пользователь только что их "почекал". Если этого не делать после перезагрузки формы пользователю нужно будет снова выбирать страну, затем области, затем города.
В вашем примере все на js, никакого php и mysql там нет.
 
Ну если всё на JS, то после перезагрузки формы у нас есть city_id. Значит для того чтобы по city_id строить страну и область нужно чтобы у этого city_id была ссылка на нужную страну и область для которой он относится.
Но как по мне проще в ответ передавать еще и страну с областью... и не страдать фигней.. не?)
 
Ну если всё на JS, то после перезагрузки формы у нас есть city_id. Значит для того чтобы по city_id строить страну и область нужно чтобы у этого city_id была ссылка на нужную страну и область для которой он относится.
Но как по мне проще в ответ передавать еще и страну с областью... и не страдать фигней.. не?)
У меня не все на js. Все на js в вашем примере.
Даже если, предположим, вывести, как вы хотите, все на js после загрузки формы, то это все равно SQL-запрос, с которым у меня проблема. Если это все выводить на js, сначала города, потом области и страны, то это 3 запроса. А у меня вопрос, как все за один запрос сделать. И не забывайте, что нужно вывести не только страну или область, но и все страны и все области выбранной страны.
Пример, хотя бы схематичный, sql-запроса можете показать про что вы?
p.s. как говорят, я твое не понимэ.
 
Назад
Сверху