【发布时间】:2019-09-19 14:07:23
【问题描述】:
我正在尝试制作一个查询以查找给定城市和州 X 英里内的所有客户,基本上使用以下表格结构:
Users Table
-----------
ID
PersonsName
ZipCode
Zipcodes Table (contains all ZIPs in the US)
--------------------------------------------
ID
ZipCode
City
State
latitude
longitude
如果我已经知道我感兴趣的城市的纬度/经度,就很容易找到附近的用户,如以下查询所示:
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]
但是,我希望能够使用城市名称和州缩写来方便输入,然后让查询使用该 lat/lng 进行距离比较。
我想我可以写两个查询,第一个获取所需城市的 lat/lng,然后第二个使用结果查找返回的 lat/lng 对的一定距离内的用户,但它可以是组合成一个查询,获取城市匹配的正确纬度/经度,然后在 WHERE 子句中的距离计算中使用它?
无法弄清楚如何制作它以便可以找到城市的纬度/经度,然后在同一个查询中使用距离。
希望我们的一名员工能够简单地输入城市/州和所需的距离,代码会返回所有适用的客户。代码只会获取特定城市的第一个匹配项(大城市的 ZIP 表中可能有很多条目),但这对我们的目的来说很好(因此我们可以只使用第一个匹配项)。
【问题讨论】: