根据列值将SQL结果分组

时间:2018-08-18 15:28:36

标签: php geolocation logic

我有一个超过200万行的表。值之一是地址。有些行有一个公共地址。我正在使用php。

在我的网站上,我希望用户输入邮政编码,我将返回该邮政编码内的所有结果。然后,我将使用Google在地图上对它们进行地理定位。问题在于,由于Google会根据查询收费,因此我不会浪费时间和金钱来请求已经拥有的地址的坐标。我认为这是正确的方法:

  1. 向用户询问邮政编码

  2. 运行“选择*带有'邮政编码'= $ user_zip”(措辞)

  3. 在第一个地址上运行Geolocate并在地图上绘图

  4. 检查结果中的匹配地址,并与映射结果进行分组

  5. 查找下一个新地址

  6. 重复3-6,直到完成

有没有更好的方法来解决这个问题?我正在寻找一种高效,简便的方法来一次处理所有匹配结果,并且查询量最少。如果我的方法是正确的,有人可以请我帮我说明3-5的逻辑吗?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,那么您想要做的就是为标记中特定区域内数据库中每个记录绘制一个带有标记的地图。而您的挑战是您需要坐标来渲染每个标记。就浪费资源而言,您的方法最大的问题是您没有在数据库中存储每个地址的坐标。我建议您:

1-更改在数据库中创建这些记录的端点(或脚本或其他内容)以获取坐标并将其存储在数据库中。 2-运行一次迁移以获取每个记录的坐标。虽然我了解使用Google的地理编码在200万行中执行此操作可能会“成本很高”(200万个api调用的估算费用为1000美元)。为了节省成本,您可以使用一些开源地图工具。

在请求生命周期中以任何一种方式获取坐标都浪费资源,并且会显着影响速度。