Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Längen- und Breitengradabfrage für andere Zeilen innerhalb eines Radius von x Meile

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.