sql >> Base de Datos >  >> RDS >> Mysql

consulta de longitud y latitud mySQL para otras filas dentro de un radio de x millas

Esta es la consulta que utilizo en el localizador de tiendas con el que trabajo:

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 y :long son los puntos pasados ​​por el usuario donde lat y long son los puntos almacenados en la base de datos.

La :distancia se mide en millas, en la versión de trabajo del código, la :distancia en realidad se extrae de un menú desplegable que va de 10 a 50 millas

Se puede cambiar el código para que funcione con kilómetros cambiando 3959 (la distancia desde el centro de la tierra hasta su superficie en millas) a 6371 (3959 millas convertidas a kilómetros) gracias a joshhendo por esa solución.