Mysql实现根据经纬度按距离排序

一,使用mysl内置st_distance函数

注:本函数在mysql5.6以上版本才有

应用场景:

假设我当时的坐标:117.069,35.86 需要查询我附近50m内服务区,并按照距离由近及远排列

SELECT
s.id,s.name,s.lng,s.lat,
(st_distance (point (lng, lat),point(117.069,35.86) ) *111195) AS distance
FROM
road_servicearea s
HAVING distance<50
ORDER BY distance

二,自行编写sql语句1

$toollist=M("tool")->where($where)->field("title,address,".get_distance_sql('longitude','latitude',$longitude,$latitude)." as dis")
    ->order("dis asc")
    ->limit($start,$limit)
    ->select();
/*
$lng1:第一个经度;
$lat1:第一个纬度;
$lng2:第二个经度;
$lat2:第二个纬度;
*/
function get_distance_sql($lng1,$lat1,$lng2,$lat2){
    return "round(6378.138*2*asin(sqrt(pow(sin((".$lat1."*pi()/180-".$lat2."*pi()/180)/2),2)+cos(".$lat1."*pi()/180)*cos(".$lat2."*pi()/180)*pow(sin( (".$lng1."*pi()/180-".$lng2."*pi()/180)/2),2)))*1000)";
}

二,自行编写sql语句2

SELECT  
  id, `name`,(  
    6371 * ACOS (  
      COS ( RADIANS (31.918776) )  
      * COS( RADIANS( latitude ) )  
      * COS( RADIANS( longitude ) - RADIANS(117.284313) ) + SIN ( RADIANS(31.918776) )  
      * SIN( RADIANS( latitude ) )  
    )  
  ) AS distance  
FROM re_tenant
HAVING distance < 20  
ORDER BY distance 
LIMIT 0,20 ;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

P P PHP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值