Хотя подход, предложенный в этом примере, будет работать, он должен рассчитать расстояние для каждой строки в таблице.Это просто слишком неэффективно при работе в масштабе.Взгляните на этот урок .Он использует специальные типы данных в MySQL для координат и может искать очень быстро.Надеемся, это даст вам основание для начала.
Ваше решение может быть еще более простым.Для этого потребуется список всех почтовых индексов, а также список всех магазинов.Поскольку все ваши входы и выходы являются известными факторами, вы можете предварительно рассчитать их в таблицы «кеша», которые дадут вам очень быстрые результаты.Создайте таблицу с именем StoreDistances10Miles (угадывая типы данных и соглашения об именах):
postcode CHAR(8) INDEXED, store_id INT(8), metresAway INT(8)
Итерируйте по каждому почтовому индексу, сортируйте магазины по расстоянию и сохраняйте их в пределах 10 миль в таблицу.Теперь, когда вы хотите выполнить поиск по почтовому индексу, просто выполните поиск StoreDistances10Miles по почтовому индексу, и вы получите свой список.Убедитесь, что вы проиндексировали postcode
.
. Вам нужно будет воспроизвести таблицу для каждого расстояния, которое вы хотите предложить на своем сайте.