从两个有关地理区域的mysql表中获取行

时间:2014-12-12 03:56:17

标签: php mysql join while-loop geospatial

我有两张桌子:

zipcodes:id |州|区|邮政编码(约40k记录)

县:id |州|区|县(478条记录)

以下是示例数据:

zipcodes table

county table

以下是phpmyadmin的两个表的快照: enter image description here 这是我尝试过的:

select a.state, a.district,a.zipcode,
b.county from zipcodes a inner join
county b on a.state=b.state and
a.district =b.district

但它会返回大量行,每个邮政编码重复12次。

州和地区行具有相同的值。我想要做的是获取和回显:

州|区|邮编|县

通过匹配两个表中的州和区行,因为每个县有多个zipcodes。

我尝试在while循环中使用while循环并且没有用。我在选择时也尝试使用JOIN,但也不正确。

实现这一目标的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

select a.state, a.district,a.zipcode,
b.county from zipcodes a inner join
county b on a.state=b.state and
a.district =b.district

答案 1 :(得分:0)

问题是你没有密切关注你的表和查询的含义。

我假设

  • 州分区国家
  • 区域分区状态
  • 县分区状态
  • zipcodes分区和县的交叉点

这些表包含行

in state [state] district [district] contains zipcode [zipcode] ...
in state [state] county [county] intersects district [district] ...

当您加入表格时,您会获得行

    in state [state] district [district] contains zipcode [zipcode] ...
AND in state [state] county [county] intersects district [district] ...

因此,当一个地区和县相交时,该地区和县会出现所有地区的邮政编码。即一个区域和许多县出现的邮政编码。但那不是你想要的!你(大概)想要的是,区和县的交叉口的邮政编码。即其区和县的邮政编码。但是这些信息无法从您的表中获得。您需要另一张表来告诉您每个邮政编码的县。然后你可以加入邮政编码上的两个邮政编码表。

    in state [state] district [district] contains zipcode [zipcode] ...
AND county [county] contains zipcode [zipcode]

事实上,您的表可能是使用每个邮政编码都有区和县的表来派生的。

根据我的假设是否正确,情况可能更复杂。也许zipcodes可以跨越区域和/或县界限和/或州界限。

这是具有规范形式问题的二维区间的示例,例如时间数据库,其中区间是一维的。

PS (写完上述内容后。)

谷歌搜索"区域边界跨邮政编码":

  

国会区 - 邮政编码数据库...
  https://www.zipinfo.com/products/cdz/cdz.htm
  如果5位邮政编码跨越国会区边界,   你必须使用街道地址来确定正确的国会   任何地区...

谷歌搜索"邮政编码可以跨越州界线":

  

邮政编码常见问题 - 来自carrierroutes.com
  www.carrierroutes.com/ZIPCodes.html
  这个数字可能会波动   每年几千个邮政编码,取决于....邮政编码很少   交叉州线,但跨县线通常为10%。

这意味着我们确实需要更复杂的项目符号假设来取代第四个假设。在这一点上,我真的不知道你想要什么查询。也许你想要每个邮政编码及其区县交叉点。 (如果每个邮政编码不止一个,你需要识别交叉点。也许COUNTY TABLE已经给出了州,区和县交叉点的那些ID。虽然与邮政编码没有关系。)

zipcode [zipcode] contains the intersection [id] of
    state [state], district [district] and county [county]

我不知道您可以使用哪些特定的表来构建查询,但基本数据只是绘制州,区,县和邮政编码边界的工件。

我将从区 - 邮政编码链接中留下一个完整的段落:

  

其他有用数据......
  使用国会区 - 邮政编码   数据库,您可以找到部分或部分的每个邮政编码   完全在一个特定的国会区内。或者你可以找到所有   包含特定ZIP部分内容的国会选区   码。您还可以找到城市,县和县FIPS代码   与每个国会区相关联。或者你可以识别所有   邮政编码位于特定的国会区和   也属于特定的MSA / PMSA。