У меня есть таблица мест в моей базе данных.Мне нужен запрос, чтобы узнать ближайшее местоположение, при условии каких-либо координат.Я написал следующий запрос, чтобы получить все строки вместе с их соответствующим расстоянием от заданной координаты (расстояние в метрах):
SELECT *, 111111 * DEGREES(ACOS(LEAST(COS(RADIANS(dest.latitude)) * COS(RADIANS(8.584710)) * COS(RADIANS(dest.longitude - 76.868735)) + SIN(RADIANS(dest.latitude)) * SIN(RADIANS(8.584710)), 1.0))) as distance FROM offer dest;
Это дает следующий вывод:
+----+------------------------+----------+-----------+------------+---------------------+
| id | description | latitude | longitude | name | distance |
+----+------------------------+----------+-----------+------------+---------------------+
| 2 | Location 1 Description | 8.574858 | 76.874748 | Location 1 | 1278.565430298969 |
| 12 | Location 2 Description | 8.584711 | 76.868738 | Location 2 | 0.35494725284463646 |
+----+------------------------+----------+-----------+------------+---------------------+
Itвсе работает нормально.Теперь, чтобы получить минимальное расстояние, я добавил HAVING MIN(distance)
к этому запросу.Теперь запрос выглядит следующим образом:
SELECT *, 111111 * DEGREES(ACOS(LEAST(COS(RADIANS(dest.latitude)) * COS(RADIANS(8.584710)) * COS(RADIANS(dest.longitude - 76.868735)) + SIN(RADIANS(dest.latitude)) * SIN(RADIANS(8.584710)), 1.0))) as distance FROM offer dest having MIN(distance);
Теперь этот запрос должен возвращать 1 строку, и это должно быть Расположение 2, так как он имеет минимальное местоположение, но вместо этого возвращается местоположение 1, как виднониже:
+----+------------------------+----------+-----------+------------+---------------------+
| id | description | latitude | longitude | name | distance |
+----+------------------------+----------+-----------+------------+---------------------+
| 2 | Location 1 Description | 8.574858 | 76.874748 | Location 1 | 1278.565430298969 |
+----+------------------------+----------+-----------+------------+---------------------+
Почему это так?Что-то не так с моим запросом?Если да, что это и как я могу получить местоположение с минимальным расстоянием.