Я пытаюсь создать запрос, чтобы найти всех клиентов в пределах X миль от заданного города и штата, используя в основном следующую структуру таблицы:
Users Table
-----------
ID
PersonsName
ZipCode
Zipcodes Table (contains all ZIPs in the US)
--------------------------------------------
ID
ZipCode
City
State
latitude
longitude
Itбыло бы легко найти ближайших пользователей, если бы я уже знал широту / долготу города, который меня интересует, как в следующем запросе:
SELECT ID from Users u
JOIN Zipcodes z1 ON u.zipcode = z1.zipcode
WHERE
COS(SIN(PI()*z1.latitude/180.0)*SIN(PI()*[desired latitude]/180.0)+COS(PI()*z1.latitude/180.0)*COS(PI()*[desired latitude]/180.0)*COS(PI()*[desired longitude]/180.0-PI()*z1.longitude/180.0))*3963.0 <= [desired distance]
Однако я хочу использовать названия городов иСокращения штатов, чтобы их было легче вводить, затем запрос должен использовать этот лат / лнг для сравнения расстояний.
Я думаю, я мог бы написать два запроса, первый, чтобы получить широту / долготу нужного городазатем второй, чтобы использовать результаты, чтобы найти использование на определенном расстоянии от возвращенной пары широта / долгота, но можно ли его объединить в один запрос, который получает правильный широта / долгота для совпадения города, а затем использует его в расчете расстояниякоторый находится в предложении WHERE?
Не могу понять, как его обработать, чтобы найти широту / долготу для города и затем использовать в том же запросе расстояние.
Надеясь, что один из наших сотрудников сможет просто ввести город / штат и желаемое расстояние, и код вернет всех клиентов, которые подали заявку.Код получит только первое совпадение для определенного города (для больших городов может быть много записей в таблице ZIP), но это хорошо для наших целей (и поэтому мы можем просто использовать первое совпадение).