sql >> Databasteknik >  >> RDS >> Mysql

Få alla poster från MySQL-databasen som finns inom Google Maps .getBounds?

Alla tidigare svar fungerar bara för 1/4 av världen!

W3t Tr3ys svar var nära, men det hade ett fel (extra "<").

Alla av dem fungerar bara för USA, eftersom det är på det norra halvklotet. De fungerar inte för det södra halvklotet, inte heller för östliga länder (höger om greenwich).

Här är en enkel lösning utan funktioner eller komplicerade saker.

bokstäverna är resultaten i den ordning du får dem från 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 annan lösning med och/eller (du kan testa det för hastighet, jag vet inte hur man kör det mer än en gång 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 kartlägga hela världen :)Jag hoppas någon kan markera ovanstående svar som felaktiga, för de gör att vi förlorar mycket tid på miljontals lärande människor som jag. Jag undrar hur de får så många röster när de faktiskt inte fungerar!

PS:Chansen att din kartpixelkant matchar koordinaternas exakta 15 decimaler är miljarder gånger mindre än chansen att missa en hel 3/4 av världen!



  1. SQL, hur man tar bort data och tabeller

  2. Hur man konverterar en sträng till ett datum/tid i SQL Server med CAST()

  3. Slå samman två kolumner från två tabeller till en

  4. Diagram för att uppdatera från ett rullgardinsval