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

Tengo una base de datos poblada con aproximadamente 10k filas actualmente. Todos ellos tienen una longitud / latitud basada en el centro de un código postal. Encontré una consulta que ahora estoy intentando expandir, pero en general funciona bien hasta cierto punto. Sin embargo, en mi ejemplo a continuación, estoy tratando de encontrar cosas dentro de un radio de 25 millas, que en general parece funcionar en su mayor parte. La mayoría de mis resultados rinden dentro del criterio de 25 millas, sin embargo, estoy obteniendo un puñado que está muy lejos de 86 millas a 800 millas de la marca.

Ejemplo: Este es mi centro lat / lon: 37.2790669, -121.874722 = San Jose, CA Estoy obteniendo resultados como: 33.016928, -116.846046 = San Diego, CA, que está a unas 355 millas de San Jose.

mi consulta actual se ve así:

SELECT *,(((acos(sin(($lat*pi()/180)) * sin((`latitude`*pi()/180))+cos(($lat*pi()/180))
* cos((`latitude`*pi()/180)) * cos((($lon - `longitude`)*pi()/180))))*180/pi())*60*1.1515)
AS `distance` FROM `geo_locations` HAVING `distance` <= 25 ORDER BY `distance` ASC"

Respuestas a la pregunta(2)

Su respuesta a la pregunta