php - 按与用户的距离过滤数据库查询

标签 php mysql

我有一个用户可以搜索的事件和事件数据库。我希望用户能够过滤,例如仅在我 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;
      }
}

最佳答案

这就是我查询有距离的东西的方式,只需输入用户的 $LONG 和 $LAT,你就会得到接近该用户的东西(编辑 HAVING 到你想要的距离)

//so for example you will have 1 user with 
$lat = <something>;
$long = <something>;

SELECT <some other info you want to select>, 
((ACOS(SIN($lat * PI() / 180) * SIN($lat * PI() / 180) + COS($lat * PI() / 180) * COS($lat * PI() / 180) * COS(($long - <table>.longitude) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS distance 
FROM <your table>
WHERE <maybe some filters here?>
HAVING distance<=10000
ORDER BY distance = '' DESC, distance ASC

关于php - 按与用户的距离过滤数据库查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31399006/

相关文章:

php - laravel 5.3 中未定义路由 [ payment-data ]

php - Mysql查询获取字段名和结果作为数组键和数组值

php - 有效的电子邮件地址 - XSS 和 SQL 注入(inject)

php - 比较mysql和php之间的日期

MYSQL:根据一个表的范围连接两个表

mysql - 我的触发器语法不起作用

PHP random_int 播种

php - 多维数组中的求和值

PHP/MySQL 在一个类中隔离数据库访问——如何以 OOP 方式处理多行结果集

mysql - asp mysql变量测试问题