最新文章
- MySQL中, group by 和 order by 一起使用会有排序问题,group by 和 order by 同时使用时要注意的地方
- Vue学习笔记(10) ——Vue组件中的data和methods
- Vue学习笔记(9) ——Vue组件创建的几种方式
- Vue学习笔记(8) ——Vue实例的生命周期
- Vue学习笔记(7) —— 过滤器 filter的基本使用
- Vue学习笔记(6) ——v-if指令和v-show指令
- Vue学习笔记(5) —— v-for指令和key属性
- Vue学习笔记(5) —— Vue中样式-class样式和style样式
- Vue学习笔记(4) —— v-model指令,双向数据绑定
- Vue学习笔记(3) —— Vue事件修饰符
关注我

在线咨询
x
有什么可以帮到你

点击咨询
查询附近10千米以内的店铺的SQL写法
- 分类:MySQL技术
- 时间:2018-09-11
- 共897人围观
简介最近搞项目,需要查询距离你现在所处位置附近商铺的信息,处理知道用户所处位置的经纬度,查询数据表中店铺的经纬度信息,便可方便查询附近多少千米以内的店铺
最近搞项目,需要查询距离你现在所处位置附近商铺的信息,处理知道用户所处位置的经纬度,查询数据表中店铺的经纬度信息,便可方便查询附近多少千米以内的店铺
一、首先建立一个商铺表
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