Я использую следующий код для извлечения моей базы данных для событий в пределах определенных расстояний введенной широты и долготы:вычисления расстояния MySQL
SELECT *,
(3959 * acos(
cos(radians($latitude))
* cos(radians(event_latitude))
* cos(radians(event_longitude) - radians($longitude))
+ sin(radians($latitude))
* sin(radians(event_latitude))
)) AS distance
FROM events
HAVING distance < $distance
Это прекрасно работает. Однако некоторые из моих событий не имеют широты или долготы вообще (у них нет физических мест). Таким образом, для них event_latitude
и event_longitude
оба равны 0
.
Есть ли способ получить по HAVING distance
или event_latitude = 0
? Чтобы я мог получить результат, который имеет события на определенном расстоянии И события, которые вообще не имеют широты или долготы?
Если я поставил проверку оценки на 0 в оговорке WHERE
, она все равно потерпит ошибку HAVING
. И я не могу поместить оценку в предложение HAVING
, потому что получаю неизвестную ошибку столбца.
У кого-нибудь есть идеи?
Добавить 'или sum (event_latitude = 0)> 0' до конца –
Являются ли поля event_lat/long NULL, когда события не имеют физических местоположений? Не могли бы вы разместить свою структуру БД? Каковы значения по умолчанию для этих длинных полей lat? – khuderm
Они не являются нулевыми, они равны 0. –