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

Obtener todos los registros de la base de datos MySQL que se encuentran dentro de Google Maps .getBounds?

¡Todas las respuestas anteriores solo funcionan para 1/4 del mundo!

La respuesta de W3t Tr3y estuvo cerca, pero tenía un error (extra "<").

Todos ellos solo sirven para EE. UU., porque está en el hemisferio NORTE. No sirven para el hemisferio sur, ni para los países del este (a la derecha de Greenwich).

Aquí hay una solución simple sin funciones ni cosas complicadas.

las letras son los resultados en el orden en que los obtiene de map.getBounds(), es decir, swlat, swlng, nelat, nelng =a, b, c, d.

SELECT * FROM tilistings WHERE
(CASE WHEN a < c
        THEN lat BETWEEN a AND c
        ELSE lat BETWEEN c AND a
END) 
AND
(CASE WHEN b < d
        THEN lng BETWEEN b AND d
        ELSE lng BETWEEN d AND b
END) 

u otra solución con y/o (puede probar la velocidad, no sé cómo ejecutarlo más de una vez en WorkBench)

SELECT * FROM tilistings WHERE
(a < c AND lat BETWEEN a AND c) OR (c < a AND lat BETWEEN c AND a)
AND 
(b < d AND lng BETWEEN b AND d) OR (d < b AND lng BETWEEN d AND b)

Ahora puedes mapear todo el mundo :) Espero que alguien pueda marcar las respuestas anteriores como incorrectas, porque nos están haciendo perder mucho tiempo con millones de personas que aprenden como yo. ¡Me pregunto cómo obtienen tantos votos cuando en realidad no funcionan!

PD:¡Las posibilidades de que el borde de píxel de tu mapa coincida con el valor exacto de 15 decimales de las coordenadas es un millón de veces menor que las posibilidades de perder 3/4 del mundo!