MySQL - Поиск отрицательных значений долготы с помощью BETWEEN - PullRequest
8 голосов
/ 02 апреля 2012

Я нашел много похожих сообщений и даже пытался выяснить, как обрабатывать отрицательные значения в MySQL, но безрезультатно.

У меня есть сайт, на котором я использую Карты Google, и в качестве повышения производительности я ограничиваю маркеры, которые нарисованы на карте, теми, которые находятся в границах карты.

Я хотел бы разработать запрос, который будет работать с положительными или отрицательными значениями latitude и longitude.

Для базы данных:

latitude FLOAT( 10, 6 )
longitude FLOAT( 10, 6 )

Запрос:

SELECT *
FROM `table` 
WHERE `latitude` BETWEEN 47.926930 AND 47.929806 
AND `longitude` BETWEEN -97.077303 AND -97.083997

Если я опускаю предложение BETWEEN для longitude, я получаю результаты, хотя и некорректные без ограничения longitude.

Я пробовал это:

AND -`longitude` BETWEEN ABS( -97.077303 ) AND ABS( -97.083997 )

Что работает, но только для отрицательных значений longitude.

Нужно ли проверять longitude, если оно отрицательное?

Ответы [ 3 ]

11 голосов
/ 02 апреля 2012

Вы также можете использовать функции greatest() и least(), поэтому вам не нужно беспокоиться о параметрах. Например:

SELECT * FROM table
WHERE latitude BETWEEN least(@lat1, @lat2) AND greatest(@lat1, @lat2)
AND  longitude BETWEEN least(@lon1, @lon2) AND greatest(@lon1, @lon2)
4 голосов
/ 02 апреля 2012

between ожидает, что формат будет somefield BETWEEN lowervalue AND highervalue. Ваши отрицательные долготы имеют переключенные более высокие / более низкие значения. Должно быть

AND longitude BETWEEN -97.083997 AND -97.077303

отрицательный 97,08 на самом деле ниже, чем отрицательный 97,07

2 голосов
/ 02 апреля 2012

Проверьте, как отрицательные числа появляются в числовой строке.:)

SELECT *
FROM `table` 
WHERE `latitude` BETWEEN 47.926930 AND 47.929806 
  AND `longitude` BETWEEN -97.083997 AND -97.077303 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...