Все предыдущие ответы работают только на 1/4 мира!
W3t Ответ Tr3y был близок, но с ошибкой (лишнее "<"). </p>
Все они работают только для США, потому что они в СЕВЕРНОМ полушарии.
Они не работают ни для южного полушария, ни для восточных стран (справа от Гринвича).
Вот простое решение без функций или сложных вещей.
буквы - это результаты в том порядке, в каком вы получаете их из map.getBounds (), т.е. 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)
или другое решение с и / или (вы можете проверить его на скорость, я не знаю, как запустить его несколько раз в 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)
Теперь вы можете наносить на карту весь мир :)
Я надеюсь, что кто-то может пометить вышеупомянутые ответы как неправильные, потому что они заставляют нас терять много времени для миллионов таких людей, как я. Интересно, как они получают так много голосов, когда они на самом деле не работают!
PS: вероятность того, что край пикселя вашей карты будет соответствовать точному значению координат в 15 десятичных знаков, в миллионы раз меньше, чем шансы пропустить целые 3/4 мира!