Hier ist die Abfrage, die ich für die Filialsuche verwende, mit der ich arbeite:
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
und :long
sind die vom Benutzer übergebenen Punkte, bei denen lat
und long
sind die in der Datenbank gespeicherten Punkte.
Die :Distanz wird in Meilen gemessen, in der Arbeitsversion des Codes wird die :Distanz tatsächlich aus einem Drop-down-Menü gezogen, das von 10 bis 50 Meilen reicht
Um den Code so zu ändern, dass er mit Kilometern arbeitet, können Sie 3959 (die Entfernung vom Erdmittelpunkt zu ihrer Oberfläche in Meilen) in 6371 (3959 Meilen in Kilometer umgerechnet) ändern, dank joshhendo für diese Lösung.