Mysql
 sql >> Database >  >> RDS >> Mysql

Ottieni tutti i record dal database MySQL che si trovano all'interno di Google Maps .getBounds?

Tutte le risposte precedenti funzionano solo per 1/4 del mondo!

La risposta di W3t Tr3y era simile, ma conteneva un errore (extra "<").

Tutti funzionano solo per gli USA, perché si trovano nell'emisfero NORD. Non funzionano per l'emisfero sud, né per i paesi orientali (a destra di Greenwich).

Ecco una soluzione semplice senza funzioni o cose complicate.

le lettere sono i risultati nell'ordine in cui li ottieni da map.getBounds() cioè 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) 

o un'altra soluzione con e/o (puoi testarlo per la velocità, non so come eseguirlo più di una volta in 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)

Ora puoi mappare il mondo intero :) Spero che qualcuno possa contrassegnare le risposte di cui sopra come errate, perché ci stanno facendo perdere molto tempo con milioni di persone che imparano come me. Mi chiedo come ottengano così tanti voti quando in realtà non funzionano!

PS:le possibilità che il bordo del pixel della tua mappa corrisponda all'esatto valore di 15 decimali delle coordinate è miliardi di volte inferiori alle possibilità di perdere un intero 3/4 del mondo!