【问题标题】:Applying Information from one table to a separate table in same database?将信息从一个表应用到同一数据库中的另一个表?
【发布时间】:2013-03-08 21:18:25
【问题描述】:

我有包含邮政编码及其位置信息(即经度、纬度等)的表 1,表 2 包含带有地址的属性...我需要连接表 1 中邮政编码的经度和纬度表2中的地址>>

能够创建一个搜索,在特定邮政编码的 (x) 英里半径内提供最近的属性...

我不知道该怎么做。我需要合并这两个表吗?或者我可以进行同时从两者中提取信息的搜索吗?

谢谢!

【问题讨论】:

  • 也许您应该检查您的表格是否遵循正常形式 (3NF)。如果您必须创建一个唯一的表,或者您必须使用外键创建 2 个表,它会回答您将一个表连接到另一个表。

标签: php sql geocoding


【解决方案1】:

首先,您需要在这两个表之间建立关系,可以使用 Zipcode,也可以使用代理键。然后你可以加入这两个表进行搜索。

【讨论】:

    【解决方案2】:

    您应该在邮政编码表中选择与您的坐标匹配的邮政编码,然后加入地址包含该邮政编码的地址表。

    http://dev.mysql.com/doc/refman/5.0/en/join.html

    【讨论】:

      【解决方案3】:

      如果我正确理解您的问题,问题是服务器无法判断每个地址之间的距离,而其中两个地址的邮政编码相同。
      让我重述一下。如果您有地址 A、B 和 C,并且它们都具有相同的邮政编码,则无法(除非您在地址表中也有坐标)来判断 A 与 B 或 C 的距离。

      一个可能的解决方法是只使用邮政编码来关联表格。然后你只需要一个像这样的简单连接查询:

      SELECT <fields> 
      FROM TABLE1 a 
      join TABLE2 b 
      on 
      ( a.zipcode=b.zipcode ) 
      WHERE a.zipcode=<Your_search_here>
      

      在该示例中,您的邮政编码甚至不必在您选择的字段中。

      我希望这会有所帮助 =)

      【讨论】:

        【解决方案4】:

        这是从我制作的一个网站上截取的,一个客户跳过城镇并且从未付钱给我 - 享受:

        <?php
        
        $res = mysqli_query($dh,
            "SELECT `items`.`id`, `items`.`title`, `items`.`postcode`, `geodata`.`lat`,
            `geodata`.`long`, (6371.009*acos(cos(radians(" . $_SESSION['lat'] . "))*
            cos(radians(`geodata`.`lat`))*cos(radians(`geodata`.`long`)-radians(" .
            $_SESSION['long'] . "))+sin(radians(" . $_SESSION['lat'] . "))*
            sin(radians(`geodata`.`lat`)))) AS `distance`
            FROM `items`, `geodata`
            WHERE `geodata`.`postcode` = `items`.`postcode`
            ORDER BY `distance` ASC"
        );
        
        echo '<table>';
        
        while($item = mysqli_fetch_assoc($res))
        {
            echo '<tr>' .
                '<td><a href="/' . $item['id'] . '">' . $item['title'] . '</a></td>' .
                '<td>' . $item['postcode'] . ' (' . number_format($item['distance']) . 'km away)</td>' .
            '</tr>';
        }
        
        echo '</table>';
        
        ?>
        

        在本例中,$_SESSION['lat']$_SESSION['long'] 包含用户的位置。

        还需要一个名为 geocode 的 MySQL 表:

        postcode | lat         | long
        200      | -35.2765521 | 149.1220236
        810      | -12.3808934 | 130.8773842
        

        (这些来自澳大利亚)。

        这将返回items 列表,最近的在前,距离以公里为单位。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-07-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-04
          • 1970-01-01
          • 2017-12-09
          • 2016-07-19
          相关资源
          最近更新 更多