Ето заявката, която използвам в локатора на магазини, с който работя:
SELECT
`id`,
(
6371 *
acos(
cos( radians( :lat ) ) *
cos( radians( `lat` ) ) *
cos(
radians( `long` ) - radians( :long )
) +
sin(radians(:lat)) *
sin(radians(`lat`))
)
) `distance`
FROM
`location`
HAVING
`distance` < :distance
ORDER BY
`distance`
LIMIT
25
:lat
и :long
са точките, предавани от потребителя, където lat
и long
са точките, съхранени в базата данни.
Разстоянието :distance се измерва в мили, в работната версия на кода :distance всъщност се изтегля от падащо меню, вариращо от 10-50 мили
Промяната на кода за работа с километри може да се осъществи чрез промяна на 3959 (разстоянието от центъра на земята до повърхността й в мили) на 6371 (3959 мили, преобразувани в километри) благодарение на joshhendo за това решение.