MySql中的快速Zipcode搜索

时间:2014-10-14 18:39:06

标签: mysql search zipcode

我有一个花店的MySQL表,我正在尝试编写一个搜索功能,它将Zipcode作为输入,并找到所有提供给该邮政编码的花店。 我桌上的每个花店记录都有3个项目

  • 地理编码经度(以花店地址为中心)
  • 地理编码纬度(以花店地址为中心)
  • 花店提供的城镇名称和邮政编码的字符串字段 例如 - 波士顿(02215,02108,02109),切尔西(02150),萨默维尔(02143,02144,02145)

假设我想找到所有送到“02108”的花店。在MySQL中实现此搜索的最佳方法是什么?

我在想

  1. 完全匹配搜索 - 但这需要每次搜索都要扫描 整张桌子。低效?

  2. Haversine search + Exact Match - 使用latitutde / longitude值将搜索范围缩小到15英里半径

    MySQL Great Circle Distance (Haversine formula) 然后在这些结果中执行完全匹配。

  3. 还有别的吗?

  4. 非常感谢您的想法和意见。

1 个答案:

答案 0 :(得分:1)

正确的方法是将邮政编码列表表示为联结表,每个花店一行,每个邮政编码一行。所以,你的第一个花店可能会有这些行:

FloristId   Zip
1           02215
1           02108
1           02109
1           02150
1           02143
1           02144
1           02145

然后,在zip列上构建索引。然后,您可以使用简单的联接来获得提供特定邮政编码的花店。

您可以使用参考表来查找主要城镇的邮政编码。美国人口普查局有一个从邮政编码制表区到城镇名称的映射。 USPS可能有类似的东西。