sql >> Database >  >> RDS >> Mysql

Alle records uit de MySQL-database ophalen die zich in Google Maps .getBounds bevinden?

Alle voorgaande antwoorden werken maar voor 1/4 van de wereld!

Het antwoord van W3t Tr3y was dichtbij, maar er zat een fout in (extra "<").

Ze werken allemaal alleen voor de VS, omdat het op het NOORD-halfrond is. Ze werken niet voor het zuidelijk halfrond, noch voor oostelijke landen (rechts van Greenwich).

Hier is een eenvoudige oplossing zonder functies of ingewikkelde dingen.

letters zijn de resultaten in de volgorde waarin je ze uit map.getBounds() haalt, d.w.z. 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) 

of een andere oplossing met en/of (je kunt het testen op snelheid, ik weet niet hoe ik het vaker dan één keer in WorkBench moet uitvoeren)

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)

Nu kun je de hele wereld in kaart brengen :) Ik hoop dat iemand bovenstaande antwoorden als onjuist kan markeren, omdat we hierdoor veel tijd verliezen aan miljoenen lerende mensen zoals ik. Ik vraag me af hoe ze zoveel stemmen krijgen terwijl ze eigenlijk niet werken!

PS:De kans dat de pixelrand van je kaart overeenkomt met de exacte 15 decimalen van de coördinaten is ontelbare keren kleiner dan de kans dat je een hele 3/4 van de wereld mist!



  1. Gegevens invoegen in de Oracle-database met behulp van php

  2. SQL, querybuilders en ORM's vergelijken

  3. Hoe een Pandas Dataframe naar Django-model te schrijven?

  4. Naamloze beperkingen laten vallen