MySql中的快速Zipcode搜索

MySql中的快速Zipcode搜索,mysql,search,zipcode,Mysql,Search,Zipcode,我有一个MySQL的花店列表,我正在尝试编写一个搜索函数,它将Zipcode作为输入,并找到所有发送到Zipcode的花店。 我的表格中的每个花店记录有3项 地理编码经度(以花店地址为中心) 地理编码纬度(以花店地址为中心) 花店送货的城镇名称和邮政编码的字符串字段 e、 波士顿(022150210802109)、切尔西(02150)、萨默维尔(021430214402145) 比如说,我想找到所有送“02108”的花店。在MySQL中实现此搜索的最佳方式是什么 我在想 精确匹配搜索-但这需

我有一个MySQL的花店列表,我正在尝试编写一个搜索函数,它将Zipcode作为输入,并找到所有发送到Zipcode的花店。 我的表格中的每个花店记录有3项

  • 地理编码经度(以花店地址为中心)
  • 地理编码纬度(以花店地址为中心)
  • 花店送货的城镇名称和邮政编码的字符串字段 e、 波士顿(022150210802109)、切尔西(02150)、萨默维尔(021430214402145)
比如说,我想找到所有送“02108”的花店。在MySQL中实现此搜索的最佳方式是什么

我在想

  • 精确匹配搜索-但这需要每次搜索都扫描 整张桌子。效率低下

  • Haversine搜索+精确匹配-使用纬度/经度值将搜索范围缩小到15英里半径

    然后在这些结果中执行精确匹配

  • 还有别的吗


  • 非常感谢您的想法和意见

    正确的方法是将邮政编码列表表示为一个连接表,每个花店一行,每个邮政编码一行。因此,您的第一个花店可能有以下几行:

    FloristId   Zip
    1           02215
    1           02108
    1           02109
    1           02150
    1           02143
    1           02144
    1           02145
    
    然后,在
    zip
    列上建立索引。然后,您可以使用一个简单的连接,让花店提供特定的邮政编码


    您可以使用参考表查找主要城镇的邮政编码。美国人口普查局有一张从邮政编码列表区域到城镇名称的地图。USPS可能也有类似的功能。

    您是否能够在花店id和邮政编码上以1对多的形式添加子表?这将使你的搜索更加高效。在某个时候,你将进行一次完整的表格读取,以缩小搜索结果的范围。在zipcode/town字段中,最经济的似乎是
    like
    <代码>从类似“%”的表中选择*例如。在做像这样的
    之前,对所有这些做一个哈弗森分析,以缩小范围。这需要大量的处理。感谢gmiley和JNevill的快速响应。我同意,一个孩子或是一张连接桌是最好的选择。谢谢戈登。我认为你的建议是有道理的。谢谢你的快速回复!然而,您确实实现了它-尝试并避免期望一个5位数的zip。有前导零的用户通常不提供前导零,因此请确保您能够处理“803”和“2145”用例。@AlMills。在美国,人们总是提供前导零(至少在我的经验中是这样)。也许这是国民心理的一部分,但邮政编码是五位数(除非是九位数)。