Mysql
 sql >> Base de données >  >> RDS >> Mysql

requête de longitude et de latitude mySQL pour d'autres lignes dans un rayon de x mile

Voici la requête que j'utilise sur le localisateur de magasins avec lequel je travaille :

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 et :long sont les points passés par l'utilisateur où lat et long sont les points stockés dans la base de données.

La :distance est mesurée en miles, dans la version de travail du code la :distance est en fait extraite d'une liste déroulante allant de 10 à 50 miles

Changer le code pour qu'il fonctionne avec les kilomètres peut être accompli en changeant 3959 (la distance entre le centre de la terre et sa surface en miles) en 6371 (3959 miles convertis en kilomètres) grâce à joshhendo pour cette solution.