mysql根据用户经纬度查询附近商家,mysql根据经纬度获取附近的商家
创建geo表
create table geo(
geo_id INT NOT NULL AUTO_INCREMENT,
lng float NOT NULL,
lat float NOT NULL,
name VARCHAR(100) NULL,
PRIMARY KEY ( geo_id )
);
INSERT INTO `geo`(`lng`, `lat`, `name`) VALUES (118.302416,33.958887,"实验小学");
INSERT INTO `geo`(`lng`, `lat`, `name`) VALUES (118.303997,33.95188,"宿迁市人民医院");
INSERT INTO `geo`(`lng`, `lat`, `name`) VALUES (118.302991,33.935828,"宿迁学院");
INSERT INTO `geo`(`lng`, `lat`, `name`) VALUES (118.28215,33.959307,"金陵名府");
INSERT INTO `geo`(`lng`, `lat`, `name`) VALUES (118.290081,33.925404,"润园");
INSERT INTO `geo`(`lng`, `lat`, `name`) VALUES (118.354751,33.959007,"国际馆");
下面是google给的解决方案(基于公里km)。
SELECT
geo_id, `name`,(
6371 * acos (
cos ( radians(33.958887) )
* cos( radians( lat ) )
* cos( radians( lng ) - radians(118.302416) )
+ sin ( radians(33.958887) )
* sin( radians( lat ) )
)
) AS distance
FROM geo
HAVING distance < 20
ORDER BY distance
LIMIT 0 , 20;
其中33.958887是纬度,118.302416是经度。
牛了个逼的。
/** 附近的商家 */
public function get_near_business() {
if (!$this->validate->validate('lng', ['require','regex|-?((0|1?[0-7]?[0-9]?)(([.][0-9]{1,4})?)|180(([.][0]{1,4})?))'])) { // 经度
$this->json->setErr(10001, '缺少lng或lng格式不正确');
$this->json->Send();
}
if (!$this->validate->validate('lat', ['require','regex|-?((0|[1-8]?[0-9]?)(([.][0-9]{1,4})?)|90(([.][0]{1,4})?))'])) { // 纬度
$this->json->setErr(10001, '缺少lat或lng格式不正确');
$this->json->Send();
}
if (!isset($_POST['page']) || $_POST['page'] < 1) {
$_POST['page'] = 1;
}
// 分页获取附近的商家信息
$sql_count = "SELECT id, `name`,( 6371 * acos (
cos ( radians(".$_POST['lat'].") )
* cos( radians( lat ) )
* cos( radians( lng ) - radians(".$_POST['lng'].") )
+ sin ( radians(".$_POST['lat'].") )
* sin( radians( lat ) )
)
) AS distance
FROM tf_my_business
WHERE `status` = 1
HAVING distance < 10";
$count = count(M()->query($sql_count));
$hasPage = ceil($count / C('PAGE.LIMIT'));
$hasPage = $hasPage ? $hasPage : 1;
if ($_POST['page'] > $hasPage) {
$this->json->setErr(10002, '页数有误');
$this->json->Send();
}
$limit = (($_POST['page'] - 1) * C('PAGE.LIMIT')) . "," .C('PAGE.LIMIT');
$sql_list = "SELECT `id`,`name`,`info`,( 6371 * acos (
cos ( radians(".$_POST['lat'].") )
* cos( radians( lat ) )
* cos( radians( lng ) - radians(".$_POST['lng'].") )
+ sin ( radians(".$_POST['lat'].") )
* sin( radians( lat ) )
)
) AS distance
FROM tf_my_business
WHERE `status` = 1
HAVING distance < 10
ORDER BY distance ASC
LIMIT ".$limit;
$datalist = M()->query($sql_list);
if ($datalist) {
// 处理datalist
$my_business_img_model = M('my_business_img');
foreach ($datalist as &$v) {
// 获取主图
$my_business_img_info = $my_business_img_model->where(['m_b_id'=>$v['id'],'type'=>1,'is_main'=>1])->find();
$v['img'] = $my_business_img_info['img'];
if (strpos($v['img'],'cdn') === false) {
$v['img'] = C('CDN.URI').$v['img'];
}
}
$data['datalist'] = $datalist;
$data['current_page'] = $_POST['page'];
$data['hasPage'] = $hasPage;
$this->json->setErr(0, '获取成功');
$this->json->setAttr('data',$data);
$this->json->Send();
} else {
$this->json->setErr(10003, '暂无数据');
$this->json->Send();
}
}
{
"errno": 0,
"errdesc": "获取成功",
"timestamp": 1524749336,
"data": {
"datalist": [
{
"id": "3",
"name": "京东",
"info": "京东",
"distance": "4.665364145881758",
"img": "https://cdn.caomall.net/1524732806744365022.png"
}
],
"current_page": "1",
"hasPage": 1
}
}
mysql根据用户经纬度查询附近商家,mysql根据经纬度获取附近的商家相关推荐
- 【MySQL】一条查询语句在MySQL内部的执行过程
我们几乎每天都在写SQL语句,当我们写了一条查询语句,会得到一个查询结果,但是它在MySQL内部是怎样的一个执行过程呢? mysql> select * from T where Id = 10 ...
- Win10 Wsl可以装mysql_WSL win10子系统linux-ubuntu 安装mysql root用户远程连接 开机启动mysql服务 用navicat连接登录...
0.若之前有装过mysql,需要先清除mysql相关的安装信息 apt-get remove mysql-server apt-get autoremove mysql-server apt-get ...
- mysql 删除用户变量_MySql安装与MySQL添加用户、删除用户与授权
MySql中添加用户,新建数据库,用户授权,删除用户,修改密码(注意每行后边都跟个;表示一个命令语句结束): 1.新建用户 1.1 登录MYSQL: @>mysql -u root -p @&g ...
- linux忘记mysql登录用户密码_linux中忘记mysql用户root密码解决方案
1.vim /etc/my.cnf [mysqld] skip-grant-tables ##追加此行,跳过权限表, 2.重启mysql systemctl restart mysqld 3.mysq ...
- linux mysql root用户密码_Linux下修改Mysql的用户(root)的密码
1.root用户登录到mysql数据库 代码示例: /usr/local/mysql/bin/mysql -u root -p (输入密码进入mysql) 2.进入mysql,输入: 代码示例: us ...
- mysql创建用户表的sql语句,mysql创建表的sql语句
mysql 动态sql语句,如何用一款小工具大大加速MySQL SQL语句优化(附源,mysql分页查询sql语句,mysql创建表的sql语句 mysql建表语句_计算机软件及应用_IT/计算机_专 ...
- mysql 临时表联表查询_Mysql应用MySQL使用临时表加速查询的方法
<MysqL应用MysqL使用临时表加速查询的方法>要点: 本文介绍了MysqL应用MysqL使用临时表加速查询的方法,希望对您有用.如果有疑问,可以联系我们. 本文实例讲述了MysqL使 ...
- mysql修改用户密码1133_后台修改mysql用户密码后无法连接
系统名称 WDlinux Control Panel 当前版本1.13(20110421) 检查更新 操作系统版本 Linux 2.6.18-238.el5 创建站点时创建了mysql账户和数据库,之 ...
- mysql 4 中文模糊查询_解决MySQL中文模糊查询问题
解决MySQL中文模糊查询问题: 我们在MySQL中进行中文模糊查询时,经常会返回一些与之不相关的记录,比如查找 "%a%" 时,返回的可能有中文字符,却没有 a 字符存在.对于此 ...
- mysql教程多表查询_解析Mysql多表查询的实现
查询是数据库的核心,下面就为您介绍Mysql多表查询时如何实现的,如果您在Mysql多表查询方面遇到过问题,不妨一看. Mysql多表查询: CREATE TABLE IF NOT EXISTS co ...
最新文章
- RDKit:化合物相似性搜索
- 《数学之美》第22章 自然语言处理的教父马库斯和他的优秀弟子们
- Cloudify — Blueprints
- Java Stub 研究学习(2)
- 【机器学习基础】(二):理解线性回归与梯度下降并做简单预测
- 网易云音乐社交玩法的背后,听说有一只神秘部队保驾护航?
- boost::iostreams::example::container_device用法的测试程序
- hibernate在saveOrUpdate时,update报错:a different object with the same identifier value was already assoc
- JS特效代码大全(十一)超炫的js图片展示效果(三)
- PreparedStatement批量执行sql
- 统计各部门的薪水总和_近年来,统计学热过金融火过计算机,这是真的吗?
- MaxScale Binlog Server实践
- linux 修改分辨率lcd_如何在Ubuntu 12.04中为LCD添加显示分辨率? xrandr问题
- 京条计划,今日头条不仅是京东的又一流量入口
- 为什么 Laravel 会成为最成功的 PHP 框架?
- ORA-01790:表达式必须具有与对应表达式相同的数据类型
- UE4 下载4.11.2的时候:当前遇到连接问题,正在重试
- vue组件库开发遇到的regeneratorRuntime is not defined
- 在esp32开发板上实现的web_radio,基于wm8978 codec芯片
- 记公司同事的一次集体活动
热门文章
- 浏览器打开默认为360主页,如何修改
- Code33 整数转罗马数字
- SpringMVC(三) --------- SSM 整合开发案例
- BAT病毒-让电脑快速蓝屏
- OpenCV 学习笔记-day14 图像几何形状绘制 (rect类 RotatedRect 类,rectangle绘制矩形 circle绘制圆形函数 line画线函数 ellipse画椭圆函数)
- python声音模拟_5秒钟让python克隆别人的声音
- html表格中加背景图片,html设置表格背景图片.doc
- Java泛型方法解惑
- 计算机程序员的英文求职面试,程序员英文面试自我介绍
- CRMEB开源商城部署在腾讯云