sql >> Databáze >  >> RDS >> Mysql

Získat všechny záznamy z databáze MySQL, které jsou v Google Maps .getBounds?

Všechny předchozí odpovědi fungují pouze pro 1/4 světa!

Odpověď W3t Tr3y byla blízko, ale měla chybu (navíc "<").

Všichni pracují pouze pro USA, protože jsou na SEVERNÍ polokouli. Nepracují pro jižní polokouli ani pro východní země (vpravo od Greenwiche).

Zde je jednoduché řešení bez funkcí nebo složitých věcí.

písmena jsou výsledky v pořadí, v jakém je získáte z map.getBounds(), tj. 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) 

nebo jiné řešení pomocí a/nebo (můžete to otestovat na rychlost, nevím, jak to ve WorkBench spustit více než jednou)

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)

Nyní můžete zmapovat celý svět :) Doufám, že někdo může označit výše uvedené odpovědi jako nesprávné, protože kvůli nim ztrácíme spoustu času miliony lidí, kteří se učí, jako jsem já. Zajímalo by mě, jak mohou získat tolik hlasů, když ve skutečnosti nefungují!

PS:Šance, že hrana vašeho pixelu na mapě bude odpovídat přesné hodnotě souřadnic na 15 desetinných míst, je milionkrát menší než šance, že minete celé 3/4 světa!



  1. Přestaňte prosím používat tento anti-vzor UPSERT

  2. generovat prázdné řádky, i když jsou prázdné mezi 2 daty

  3. Escapování dvojtečky ':' v dotazech JPA

  4. Jak zpozdím sloupce v MySQL?