今天要说的是如何在Mysql中实现根据已知的经纬度查询周围的商家(或者是别的带有经纬度字段的表)并且根据距离的远近来进行排序!
废话就不多说了,直奔主题~
首先有这么个商城表
lng代表经度,lat代表纬度!其他的不重要
然后用下面的SQL语句进行查询即可!
假设当前 经度为:118.356734
纬度为:21.785367
则SQL语句如下
SELECT
*,(
6371 * acos (
cos ( radians(21.785367) )
* cos( radians( lat ) )
* cos( radians( lng ) - radians(118.356734) )
+ sin ( radians(21.785367) )
* sin( radians( lat ) )
)
) AS distance //距离
FROM t_shop
HAVING distance < 2 //筛选距离小于2km的商家(可不写),如果没查到数据就是没有小于2km的商家
ORDER BY distance //根据距离远近来排序 默认升序 (可不写)
LIMIT 0 , 20; //显示前20条数据(可不写)
在数据库中查询的结果如下