根据列值将 SQL 结果组合成组

Posted

技术标签:

【中文标题】根据列值将 SQL 结果组合成组【英文标题】:Combining SQL results into groups based on column value 【发布时间】:2018-08-18 15:28:36 【问题描述】:

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

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

    向用户询问邮政编码

    运行“Select * with 'Zip Code' = $user_zip”(释义)

    在第一个地址上运行地理定位并在地图上绘图

    检查结果和组中与映射结果的匹配地址

    查找下一个新地址

    重复 3-6 直到完成

有没有更好的方法来解决这个问题?我正在寻找效率、一次操作所有匹配结果的简单方法以及最少的查询量。如果我的方法是正确的,有人可以帮我解释数字 3-5 的逻辑吗?

【问题讨论】:

【参考方案1】:

如果我理解这一点,您正在尝试做的是为数据库中某个 zip 区域内的每条记录呈现带有标记的地图。你的挑战是你需要坐标来渲染每个标记。您的方法在浪费资源方面的最大问题是您没有将每个地址的坐标存储在数据库中。我建议你:

1 - 更改在您的数据库中创建这些记录的端点(或脚本或其他)以获取坐标并将它们存储在数据库中。 2 - 运行一次迁移以获取每条记录的坐标。虽然我知道使用 Google 的地理编码对 200 万行执行此操作可能是“昂贵的”(估计 200 万个 api 调用需要 1000 美元)。为了节省成本,您可以研究一些开源地图工具。

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

【讨论】:

我计划随时更新结果。但我没有现金一次性完成所有工作。至少现在,我需要在加载时执行此操作。我目前正在做免费版本,每天允许 2500 个免费查询 根据您的记录是否分散在多个地区、国家、大洲,您可以进行迭代。首先按城市对所有记录进行分组并获取每个城市的坐标。这仍然会为用户带来价值,但它会在同一城市的地图上显示标记。只是一个建议。

以上是关于根据列值将 SQL 结果组合成组的主要内容,如果未能解决你的问题,请参考以下文章

用于将子行组合成单行视图的 SQL 查询

sqlite - 根据字段值将 2 行中的相同字段组合成 2 列

根据列值将一行拆分为多行

如何根据另一列值将一列分成多个?

根据列值将一行分解/拆分为多行

Postgres 根据列值将行转置为列