关注我

    我的微信
在线咨询 x
在线咨询
有什么可以帮到你
点击咨询

查询附近10千米以内的店铺的SQL写法

简介最近搞项目,需要查询距离你现在所处位置附近商铺的信息,处理知道用户所处位置的经纬度,查询数据表中店铺的经纬度信息,便可方便查询附近多少千米以内的店铺


最近搞项目,需要查询距离你现在所处位置附近商铺的信息,处理知道用户所处位置的经纬度,查询数据表中店铺的经纬度信息,便可方便查询附近多少千米以内的店铺


一、首先建立一个商铺表


CREATE TABLE `shop` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `store_name` varchar(255) DEFAULT '' COMMENT '店铺名称 ',
  `address` varchar(255) DEFAULT '' COMMENT '店铺地址',
  `longitude` varchar(20) DEFAULT '' COMMENT '经度',
  `latitude` varchar(20) DEFAULT '' COMMENT '纬度',
  `citycode` int(11) DEFAULT '0' COMMENT '百度地图的城市code',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


二、Sql 写法——查询附近多少千米以内的店铺


出现 :longitude 的地方需要替换成现在用户的所处经度,出现:latitude替换成用户的所处纬度,:kilometer 替换成查询范围,单位为千米,如果是10千米就填10,latitude 和 longitude 分别代表以及存在数据库中的经纬度,shop是表名


select * from shop where sqrt((((:longitude - longitude) *
    PI() * 12656 * cos(((:latitude + latitude) /
        2) * PI() / 180) /
    180) * ((:longitude - longitude) *
    PI() * 12656 * cos(((:latitude + latitude) /
        2) * PI() / 180) /
    180)) + (((:latitude - latitude) *
    PI() * 12656 / 180) * (
    (: latitude - latitude) * PI() *
    12656 / 180))) < :kilometer


三、Sql 写法——查询最近10家店铺


出现 :longitude 的地方需要替换成现在用户的所处经度,出现:latitude替换成用户的所处纬度,:kilometer 替换成几家店铺,如果是最近10家就是10


SELECT * , (round(6367000 * 2 * asin(
sqrt(pow(sin(((latitude *
        pi()
    ) / 180 -
    23 * pi()
) / 180) / 2), 2) + cos(
    (:latitude * pi()) / 180) *
cos((latitude * pi()) /
    180) * pow(sin(((
        longitude *
        pi()) /
    180 - (:longitude *
        pi()) /
    180) / 2), 2)))))
AS distance FROM shop ORDER BY distance ASC LIMIT :number