1

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

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

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

谢谢!

4

4 回答 4

1

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

于 2013-03-19T23:28:21.250 回答
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,距离以公里为单位。

于 2013-03-19T23:49:33.217 回答
0

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

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

于 2013-03-19T23:28:56.480 回答
0

如果我正确理解您的问题,问题是服务器将无法判断每个地址彼此之间的距离或距离,而其中两个地址具有相同的邮政编码。
让我重述一下。如果您有地址 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>

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

我希望这会有所帮助=)

于 2013-03-19T23:39:08.807 回答