我有包含邮政编码及其位置信息(即经度、纬度等)的表 1,表 2 包含带有地址的属性...我需要将表 1 中邮政编码的经度和纬度连接到地址在表 2 中 >>
能够创建一个搜索,在特定邮政编码的 (x) 英里半径内提供最近的属性...
我不知道该怎么做。我需要合并这两个表吗?或者我可以进行同时从两者中提取信息的搜索吗?
谢谢!
首先,您需要在这两个表之间建立关系,可以使用 Zipcode,也可以使用代理键。然后你可以加入这两个表来做搜索。
这是从我制作的一个网站上截取的,一个客户跳过了城镇并且从未付钱给我 - 享受:
<?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
,距离以公里为单位。
您应该在邮政编码表上选择与您的坐标匹配的邮政编码,然后加入地址具有该邮政编码的地址表。
如果我正确理解您的问题,问题是服务器将无法判断每个地址彼此之间的距离或距离,而其中两个地址具有相同的邮政编码。
让我重述一下。如果您有地址 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>
在该示例中,您的邮政编码甚至不必在您选择的字段中。
我希望这会有所帮助=)