将信息从一个表应用到同一数据库中的单独表?

时间:2013-03-19 23:20:11

标签: php sql geocoding

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

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

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

谢谢!

4 个答案:

答案 0 :(得分:1)

首先,您需要在这两个表之间建立关系,您可以使用Zip Code,或者您可以使用代理键。然后你可以加入这两个表做搜索。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

如果我正确理解您的问题,问题是服务器将无法分辨每个地址彼此之间的距离或距离,而其中两个地址具有相同的邮政编码。
让我重新说一下。如果您有地址A,B和C并且它们都具有相同的邮政编码,那么除非您在地址表中也有坐标,否则无法判断B或C的距离是多少。

正如您所知,可能的解决方法是仅使用zipcode来关联表格。然后你只需要一个简单的连接查询:

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

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

我希望这有助于=)

答案 3 :(得分:0)

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

<?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的列表,最接近第一个,距离以km为单位。