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

Få alle poster fra MySQL-databasen, der er inden for Google Maps .getBounds?

Alle tidligere svar virker kun for 1/4 af verden!

W3t Tr3y's svar var tæt på, men det havde en fejl (ekstra "<").

Alle arbejder kun for USA, fordi det er på den nordlige halvkugle. De virker ikke for den sydlige halvkugle eller østlige lande (til højre for greenwich).

Her er en simpel løsning uden funktioner eller komplicerede ting.

bogstaver er resultaterne i den rækkefølge, du får dem fra map.getBounds(), dvs. 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)

eller en anden løsning med og/eller (du kan teste det for hastighed, jeg ved ikke, hvordan jeg kører det mere end én gang i 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)

Nu kan du kortlægge hele verden :) Jeg håber nogen kan markere ovenstående svar som forkerte, for de får os til at miste en masse tid til millioner af lærende mennesker som mig. Jeg undrer mig over, hvordan de får så mange stemmer, når de faktisk ikke virker!

PS:Chancerne for, at din kortpixelkant matcher koordinaternes nøjagtige værdi på 15 decimaler, er zillioner af gange mindre end chancerne for at gå glip af hele 3/4 af verden!



  1. Få en liste over datoer mellem to datoer ved hjælp af en funktion

  2. Hvordan indsætter du en PHP-konstant i en SQL-forespørgsel?

  3. Begræns en sammenkædet server til et enkelt lokalt login (T-SQL-eksempel)

  4. SQL-forespørgsel efter flere tabeller med flere joinforbindelser og kolonnefelt med kommasepareret liste