MySQL-Поиск отрицательных значений долготы между

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

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

Я хотел бы разработать запрос, который будет работать с положительными или отрицательными 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 Я получаю результаты, хотя и неверные с no longitude ограничения.

я попытался это:

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

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

мне нужно проверить longitude если его отрицательным?

3 ответов


вы также можете использовать 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)

between ожидает формате somefield BETWEEN lowervalue AND highervalue. Ваши отрицательные долготы имеют более высокие/более низкие значения. Он должен быть!--4-->

AND longitude BETWEEN -97.083997 AND -97.077303

отрицательный 97.08 на самом деле ниже, чем отрицательный 97.07


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

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