我只是在寻找有关最佳方法的建议…
我需要创建一个搜索功能,以在邮政编码的50英里半径内搜索“用户”。我有一个邮政编码表,其中包含所有美国邮政编码及其纬度/经度,但我只是想找出构造和查询数据的最佳方式…
是否应在用户表中添加纬度/经度列,并在给定邮政编码范围内的所有用户查询它?还是应该在邮政编码表中查询半径范围内的所有邮政编码,然后在用户表中查询所有具有结果(邮政编码)的用户?要么… ???目前,我愿意接受任何建议!
谢谢!
这是我找到的最好方法。当然,这需要您在数据库中对所有经纬度的邮政编码进行编码。
// get all the zipcodes within the specified radius - default 20 function zipcodeRadius($lat, $lon, $radius) { $radius = $radius ? $radius : 20; $sql = 'SELECT distinct(ZipCode) FROM zipcode WHERE (3958*3.1415926*sqrt((Latitude-'.$lat.')*(Latitude-'.$lat.') + cos(Latitude/57.29578)*cos('.$lat.'/57.29578)*(Longitude-'.$lon.')*(Longitude-'.$lon.'))/180) <= '.$radius.';'; $result = $this->db->query($sql); // get each result $zipcodeList = array(); while($row = $this->db->fetch_array($result)) { array_push($zipcodeList, $row['ZipCode']); } return $zipcodeList; }
您应该能够使用此功能。将您想要的半径的邮政编码的$ lat和$ lon传递给它,包括可选的半径,并返回一个邮政编码列表。
您可以很容易地对其进行修改,以使所有用户的邮政编码都位于(radius_sql),并将您的列表用户带回来。
编码愉快!