#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. У меня сложилось впечатление, что это была долгота и широта местоположения пользователей, из его объясненной формулы вверху.