【发布时间】:2014-07-14 11:52:09
【问题描述】:
我有一张表(user_zip_codes),上面有用户的邮政编码、纬度和经度。我在 stackoverflow 上找到了一个函数,可以找到特定半径内的邮政编码:
function zipcodeRadius($lat, $lon, $radius) {
global $mysqli;
$zipcodeList = array();
$radius = ($radius ? $radius : 20);
$sql = "SELECT userID,city,zip_code,country FROM user_zip_codes WHERE (3958*3.1415926*sqrt((lat-$lat)*(lat-$lat) + cos(lat/57.29578)*cos($lat/57.29578)*(lon-$lon)*(lon-$lon))/180) <= $radius GROUP BY zip_code";
if($stmt = $mysqli->prepare($sql)) {
$stmt->execute();
$stmt->bind_result($userID,$city,$zip_code,$country);
while($stmt->fetch()) {
$zipcodeList[] = array('userID'=>$userID,'city'=>$city,'zip_code'=>$zip_code,'country'=>$country);
}
}
return $zipcodeList;
}
完美运行。但是,我希望函数按距离对数组进行排序(通过 ASC og DESC)。我应该如何调整我的查询才能发生这种情况?
提前致谢。
更新: “距离”这个词可能看起来模棱两可(感谢 Jorge)。我只是希望按距离对邮政编码进行排序,即两点之间的距离。
【问题讨论】:
-
“距离”这个词有点诡计。那是因为如果您的意思是基于两个点的距离或基于从第一个点和第二个点的道路的距离。你要哪一个?您应该使用此信息更新您的问题。
-
@JorgeCampos,我已经更新了我的问题。我的意思是基于两点的距离。
-
在没有任何聚合函数的情况下,你不应该对任何东西进行分组!