首页 > 解决方案 > mySql - 在特定城市附近寻找客户

问题描述

我正在尝试制作一个查询以查找给定城市和州 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 进行距离比较。

我想我可以写两个查询,第一个获取所需城市的纬度/经度,然后第二个使用结果查找在返回的经度/经度对的一定距离内的用途,但它可以组合成一个获取城市匹配的正确纬度/经度然后在 WHERE 子句中的距离计算中使用它的单个查询?

无法弄清楚如何制作它以便可以找到城市的纬度/经度,然后在同一个查询中使用距离。

希望能够让我们的一名员工能够简单地输入城市/州和所需的距离,并且代码返回所有适用的客户。该代码只会获得特定城市的第一个匹配项(对于较大的城市,ZIP 表中可能有许多条目),但这对于我们的目的来说很好(因此我们可以只使用第一个匹配项)。

标签: mysqlsql

解决方案


听起来您可能需要在其中进行一些地理编码,才能将城市名称转换为坐标。有很多好的 API 可用(Google、Algolia、Mapbox 等)


推荐阅读