SELECT  
  *,(  
    6371 * acos (  
      cos ( radians( 34.21702164242081 ) )  
      * cos( radians( latitude ) )  
      * cos( radians( longitude ) - radians( 113.76823781349185 ) )  
      + sin ( radians( 34.21702164242081 ) )  
      * sin( radians( latitude ) )  
    )  
  ) AS distance  //距离
FROM merchant
HAVING distance < 0.5  //筛选距离小于0.5km的商家(可不写),如果没查到数据就是没有小于0.5km的商家
ORDER BY distance  //根据距离远近来排序 默认升序 (可不写)
LIMIT 0 , 10;  //显示前10条数据(可不写)

我的用php所以附上laravel框架版本

 $latitude = 34.21702164242081;
    $longitude = 113.76823781349185;
    return DB::table('merchant')
        ->select('*', DB::raw(
            '6371 * acos(
                    cos ( radians( '.$latitude.' ) )
                    * cos( radians ( latitude ) )
                    * cos( radians( longitude ) - radians( '.$longitude.' ) )
                    + sin( radians( '.$latitude.' ))
                    * sin( radians( latitude ) )
                )
                as distance')
                )
        ->having('distance','<',0.5)
        ->orderBy('distance')
        ->paginate(10);

记录一下

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐