我有一个 MySQL 花店表,我正在尝试编写一个搜索函数,它将以邮政编码作为输入,并找到所有提供该邮政编码的花店。 我的表中的每个花店记录有 3 项
- 地理编码经度(以花店地址为中心)
- 地理编码纬度(以花店地址为中心)
- 花店送货的城镇名称和邮政编码的字符串字段 例如- 波士顿(02215、02108、02109)、切尔西(02150)、萨默维尔(02143、02144、02145)
假设我想找到所有向“02108”送货的花店。在 MySQL 中实现此搜索的最佳方法是什么?
我在想
精确匹配搜索 - 但这需要每次搜索都扫描 整个 table 。效率低下?
半正矢搜索 + 精确匹配 - 使用纬度/经度值将搜索范围缩小到 15 英里半径
MySQL Great Circle Distance (Haversine formula) 然后在这些结果中执行精确匹配。
还有什么吗?
非常感谢您的想法和意见。
最佳答案
正确的方法是将邮政编码列表表示为联结表,每个花店一行,每个邮政编码一行。因此,您的第一家花店可能有这些行:
FloristId Zip
1 02215
1 02108
1 02109
1 02150
1 02143
1 02144
1 02145
然后,在 zip
列上构建索引。然后,您可以使用简单的联接来获取向特定邮政编码送货的花店。
您可以使用引用表来查找主要城镇的邮政编码。美国人口普查局拥有从邮政编码列表区域到城镇名称的映射。美国邮政局可能有类似的东西。
关于mysql - 在 MySql 中快速搜索邮政编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26367970/