Sql: столбец ошибки формулы Haversine не существует
У меня странная проблема, связанная с моей формулой haversine. То, как это происходит в моем приложении;
select lat,long,distance from(
select lat,long,( 6371 * acos( cos( radians("+testLatitude.to_s+") ) * cos( radians( lat ) ) * cos( radians( long ) - radians("+testLongitude.to_s+") ) + sin( radians("+testLatitude.to_s+") ) * sin( radians( lat ) ) ) ) as distance
from available_people) as dt where distance < "+distance.to_s+" order by distance
Я на 100% уверен, что у меня есть personName в моей таблице available_people, но я не могу заставить работать приведенный ниже запрос. Это дает мне столбец не существует ошибки.
select lat,long,distance from(
select personName,lat,long,( 6371 * acos( cos( radians("+testLatitude.to_s+") ) *
cos( radians( lat ) ) * cos( radians( long ) - radians("+testLongitude.to_s+") ) + sin( radians("+testLatitude.to_s+") ) * sin( radians( lat ) ) ) ) as distance
from available_people) as dt where distance < "+distance.to_s+" order by distance
Что может быть возможной причиной. Смогу ли я получить столбец personName, а также последнюю длинную информацию?
1 ответ
Не видя точную ошибку (вы действительно должны включить ее), я бы сказал, что вы должны префикс personName
с таблицей т.е. available_people.personName
или же dt.personName
(если я правильно читаю ваш запрос).
Во-вторых, хотя и не связаны, какой тип столбца вы используете для своих столбцов lat/lng? Это использует MySQL? Как плавает?
Если это так, то вы столкнетесь с серьезными проблемами производительности, когда ваша таблица будет содержать достаточно записей. Я столкнулся с этой проблемой с ~50 тыс. Записей, где запросы занимали 2 минуты или более.
Если вы работаете с геопространственными данными, рассмотрите возможность использования Postgres+PostGIS или MongoDB. Эти решения имеют геопространственную индексацию, чтобы сделать ваши запросы сверхбыстрыми, и функционируют так, что вам не придется самостоятельно создавать хаверсайн или сферический закон косинусов.