Oto zapytanie, którego używam w lokalizatorze sklepów, z którym pracuję:
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
i :long
są punktami przekazanymi przez użytkownika, gdzie lat
i long
to punkty przechowywane w bazie danych.
:odległość jest mierzona w milach, w działającej wersji kodu :odległość jest faktycznie pobierana z listy rozwijanej od 10 do 50 mil
Zmianę kodu, aby działał z kilometrami, można osiągnąć zmieniając 3959 (odległość od środka Ziemi do jej powierzchni w milach) na 6371 (3959 mil przeliczone na kilometry) dzięki joshhendo za to rozwiązanie.