PHP MySQL ближайший к почтовому индексу

#php #mysql #store #postal-code

#php #mysql #Магазин #почтовый индекс

Вопрос:

Здравствуйте, я нашел эту статью, которая полезна, но, к сожалению, я не могу заставить ее работать.

http://davidsimpson.me/2008/09/28/find-nearest-store-page-using-php-mysql-and-google-maps/

У меня есть список хранилищ в таблице MySQL с почтовым индексом, долготой, широтой и различной другой информацией, относящейся к хранилищу.

Я бы хотел, чтобы пользователь мог ввести свой почтовый индекс в форме, указать максимальное расстояние в милях (т. Е. выпадающее меню, в пределах 10 миль, в пределах 20 миль и т.д.), Затем для получения результатов по порядку из базы данных MySQL.

Кто-нибудь может пролить некоторый свет на это.

С уважением

Ответ №1:

Хотя подход, предложенный в этом примере, будет работать, он должен вычислять расстояние для каждой строки в таблице. Это просто слишком неэффективно при работе в масштабе. Взгляните на этот учебник. Он использует специальные типы данных в MySQL для координат и может выполнять поиск очень быстро. Надеюсь, это должно дать вам представление о том, с чего начать.

Ваше решение может быть еще более простым. Для этого потребуется список всех почтовых индексов, а также список всех магазинов. Поскольку все ваши входные и выходные данные являются известными факторами, вы можете предварительно рассчитать это в таблицах «кэша», что даст вам очень быстрые результаты. Создайте таблицу под названием StoreDistances10Miles (основываясь на типах данных и соглашениях об именовании):

 postcode CHAR(8) INDEXED, store_id INT(8), metresAway INT(8)
  

Выполните итерацию по каждому почтовому индексу, отсортируйте магазины по расстоянию и сохраните те, что находятся в пределах 10 миль, в таблице. Теперь, когда вы хотите выполнить поиск по почтовому индексу, просто выполните поиск в StoreDistances10Miles по почтовому индексу, и у вас будет свой список. Убедитесь, что вы проиндексировали postcode .

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

Ответ №2:

Что ж, он четко объясняет, как получить мили, поэтому все, что вам нужно, используя выпадающий список, — это добавить «Наличие миль < {dropdownvalue}» в вашу инструкцию sql. итак, если у вас есть 10 миль, у него количество миль < 10 и т.д.

Комментарии:

1. Если вы посмотрите на начальную инструкцию SQL, она содержит $ longitude и $ latitude, но этим переменным PHP заранее не присвоены никакие значения. Я что-то упускаю или пример PHP-кода неполный …?

2. У меня сложилось впечатление, что это была долгота и широта местоположения пользователей, из его объясненной формулы вверху.