Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Alle Datensätze aus der MySQL-Datenbank abrufen, die sich in Google Maps .getBounds befinden?

Alle vorherigen Antworten funktionieren nur für 1/4 der Welt!

Die Antwort von W3t Tr3y war knapp, aber sie hatte einen Fehler (zusätzliches "<").

Sie alle arbeiten nur für die USA, weil sie sich auf der Nordhalbkugel befinden. Sie arbeiten nicht für die Südhalbkugel oder die östlichen Länder (rechts von Greenwich).

Hier ist eine einfache Lösung ohne Funktionen oder kompliziertes Zeug.

Buchstaben sind die Ergebnisse in der Reihenfolge, in der Sie sie von map.getBounds() erhalten, d. h. 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) 

oder eine andere Lösung mit und/oder (Sie können es auf Geschwindigkeit testen, ich weiß nicht, wie es mehr als einmal in WorkBench ausgeführt wird)

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)

Jetzt können Sie die ganze Welt kartografieren :) Ich hoffe, jemand kann die obigen Antworten als falsch markieren, weil sie dazu führen, dass wir viel Zeit für Millionen von lernenden Menschen wie mich verlieren. Ich frage mich, wie sie so viele Stimmen bekommen, wenn sie eigentlich nicht funktionieren!

PS:Die Wahrscheinlichkeit, dass Ihre Kartenpixelkante mit dem genauen 15-Dezimalwert der Koordinaten übereinstimmt, ist millionenfach geringer als die Wahrscheinlichkeit, ganze 3/4 der Welt zu verpassen!