【发布时间】:2015-10-02 15:22:18
【问题描述】:
我有一个用户可以搜索的事件和活动数据库。我希望用户能够过滤,例如仅在我 50 公里范围内的活动和事件(lol km #canada)。显然,与每个用户的距离发生了变化。
我已经有一个脚本,可以根据经纬度计算距离并显示它。我无法弄清楚如何只显示 x 公里内的活动和事件。
不确定我应该发布什么代码,但可以发布任何需要的代码。
//MySQLi results query
$query= "SELECT id,name FROM activity WHERE active =1".$typequery.$eventtypequery.$catquery.$datequery.$keywordsquery." ORDER BY $orderby $order LIMIT $start_from,$perpage";
//Count query
$count = $mysqli->query("SELECT COUNT(*) FROM `activity` WHERE active=1".$typequery.$eventtypequery.$catquery.$datequery.$keywordsquery."");
$row = $count->fetch_row();
$total_records = $row[0];
$total_pages = ceil ($total_records /$perpage);
if (isset($page)&&($total_pages>1)) {$nextpage = $page+1;} else {$nextpage=0;}
if ($page>1) {$prevpage=$page-1;} else {$prevpage=0;}
$result=$mysqli->query($query);
function distance($lat1, $lon1, $lat2, $lon2, $unit) {
$theta = $lon1 - $lon2;
$unit="K";
$dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
$dist = acos($dist);
$dist = rad2deg($dist);
$miles = $dist * 60 * 1.1515;
$unit = strtoupper($unit);
if ($unit == "K") {
return ($miles * 1.609344);
} else if ($unit == "N") {
return ($miles * 0.8684);
} else {
return $miles;
}
}
【问题讨论】:
-
oke 所以你说你有一个可以计算距离的脚本“我已经有一个脚本可以根据纬度和经度计算距离”所以......当你从您的数据库并计算所有距离(我猜在 SELECT 中)您可以使用“HAVING distance
-
或者实际上我有点忽略了你发布的代码(对不起)......我看到你之后做的距离,但我建议在你的查询中这样做,所以在你的 SELECT(你的计算)中distance FROM
WHERE HAVING distance -
查询中的距离如何计算?