我使用与@socca1157 回答的查询相同的查询,但我认为我可以3959
在查询开始时对常量提供一个微小的解释。
我的示例还获取了用户地址的 lat 和 lng
$address = urlencode($_GET['user-address']);
$earth_radius = 3959;
$search_radius = 100;
$ch = curl_init('https://maps.google.com/maps/api/geocode/json?address='.$address.'&sensor=false');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$geocode = curl_exec($ch);
curl_close($ch);
$output = json_decode($geocode);
$lat = $output->results[0]->geometry->location->lat;
$lng = $output->results[0]->geometry->location->lng;
$sql = "SELECT *, ( $earth_radius * acos( cos( radians($lat) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians($lng) ) + sin( radians($lat) ) * sin( radians( latitude ) ) ) ) AS distance FROM table WHERE isActive = 1 HAVING distance < $search_radius ORDER BY distance LIMIT 5";
$result = mysql_query($sql);
因此,例如,如果您想以公里而不是英里进行搜索,您将使用以公里为单位的地球半径,即 6,371 公里。