Här är frågan jag använder på butikssökaren jag arbetar med:
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
och :long
är de punkter som passerat av användaren där lat
och long
är de punkter som lagras i databasen.
:distansen mäts i miles, i den fungerande versionen av koden dras :distansen faktiskt från en rullgardinsmeny som sträcker sig från 10-50 miles
Att ändra koden för att fungera med kilometer kan åstadkommas genom att ändra 3959 (avståndet från jordens centrum till dess yta i miles) till 6371 (3959 miles omvandlat till kilometer) tack vare joshhendo för den lösningen.