我有包含邮政编码及其位置信息(即经度,纬度等)的表1,表2包含带有地址的属性...我需要在表1中连接zipcodes的经度和纬度到表2中的地址>>
能够创建一个搜索,在特定邮政编码的(x)英里半径内提供最近的属性...
我不知道该怎么做。我需要将两个表合并吗?或者我可以进行同时从两者中获取信息的搜索吗?
谢谢!
答案 0 :(得分:1)
首先,您需要在这两个表之间建立关系,您可以使用Zip Code,或者您可以使用代理键。然后你可以加入这两个表做搜索。
答案 1 :(得分:0)
您应该在邮政编码表上选择与您的坐标匹配的邮政编码,然后加入地址表中包含该邮政编码的地址表。
答案 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为单位。