创建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根据经纬度获取附近的商家相关推荐

  1. 【MySQL】一条查询语句在MySQL内部的执行过程

    我们几乎每天都在写SQL语句,当我们写了一条查询语句,会得到一个查询结果,但是它在MySQL内部是怎样的一个执行过程呢? mysql> select * from T where Id = 10 ...

  2. 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 ...

  3. mysql 删除用户变量_MySql安装与MySQL添加用户、删除用户与授权

    MySql中添加用户,新建数据库,用户授权,删除用户,修改密码(注意每行后边都跟个;表示一个命令语句结束): 1.新建用户 1.1 登录MYSQL: @>mysql -u root -p @&g ...

  4. linux忘记mysql登录用户密码_linux中忘记mysql用户root密码解决方案

    1.vim /etc/my.cnf [mysqld] skip-grant-tables ##追加此行,跳过权限表, 2.重启mysql systemctl restart mysqld 3.mysq ...

  5. linux mysql root用户密码_Linux下修改Mysql的用户(root)的密码

    1.root用户登录到mysql数据库 代码示例: /usr/local/mysql/bin/mysql -u root -p (输入密码进入mysql) 2.进入mysql,输入: 代码示例: us ...

  6. mysql创建用户表的sql语句,mysql创建表的sql语句

    mysql 动态sql语句,如何用一款小工具大大加速MySQL SQL语句优化(附源,mysql分页查询sql语句,mysql创建表的sql语句 mysql建表语句_计算机软件及应用_IT/计算机_专 ...

  7. mysql 临时表联表查询_Mysql应用MySQL使用临时表加速查询的方法

    <MysqL应用MysqL使用临时表加速查询的方法>要点: 本文介绍了MysqL应用MysqL使用临时表加速查询的方法,希望对您有用.如果有疑问,可以联系我们. 本文实例讲述了MysqL使 ...

  8. mysql修改用户密码1133_后台修改mysql用户密码后无法连接

    系统名称 WDlinux Control Panel 当前版本1.13(20110421) 检查更新 操作系统版本 Linux 2.6.18-238.el5 创建站点时创建了mysql账户和数据库,之 ...

  9. mysql 4 中文模糊查询_解决MySQL中文模糊查询问题

    解决MySQL中文模糊查询问题: 我们在MySQL中进行中文模糊查询时,经常会返回一些与之不相关的记录,比如查找 "%a%" 时,返回的可能有中文字符,却没有 a 字符存在.对于此 ...

  10. mysql教程多表查询_解析Mysql多表查询的实现

    查询是数据库的核心,下面就为您介绍Mysql多表查询时如何实现的,如果您在Mysql多表查询方面遇到过问题,不妨一看. Mysql多表查询: CREATE TABLE IF NOT EXISTS co ...

最新文章

  1. RDKit:化合物相似性搜索
  2. 《数学之美》第22章 自然语言处理的教父马库斯和他的优秀弟子们
  3. Cloudify — Blueprints
  4. Java Stub 研究学习(2)
  5. 【机器学习基础】(二):理解线性回归与梯度下降并做简单预测
  6. 网易云音乐社交玩法的背后,听说有一只神秘部队保驾护航?
  7. boost::iostreams::example::container_device用法的测试程序
  8. hibernate在saveOrUpdate时,update报错:a different object with the same identifier value was already assoc
  9. JS特效代码大全(十一)超炫的js图片展示效果(三)
  10. PreparedStatement批量执行sql
  11. 统计各部门的薪水总和_近年来,统计学热过金融火过计算机,这是真的吗?
  12. MaxScale Binlog Server实践
  13. linux 修改分辨率lcd_如何在Ubuntu 12.04中为LCD添加显示分辨率? xrandr问题
  14. 京条计划,今日头条不仅是京东的又一流量入口
  15. 为什么 Laravel 会成为最成功的 PHP 框架?
  16. ORA-01790:表达式必须具有与对应表达式相同的数据类型
  17. UE4 下载4.11.2的时候:当前遇到连接问题,正在重试
  18. vue组件库开发遇到的regeneratorRuntime is not defined
  19. 在esp32开发板上实现的web_radio,基于wm8978 codec芯片
  20. 记公司同事的一次集体活动

热门文章

  1. 浏览器打开默认为360主页,如何修改
  2. Code33 整数转罗马数字
  3. SpringMVC(三) --------- SSM 整合开发案例
  4. BAT病毒-让电脑快速蓝屏
  5. OpenCV 学习笔记-day14 图像几何形状绘制 (rect类 RotatedRect 类,rectangle绘制矩形 circle绘制圆形函数 line画线函数 ellipse画椭圆函数)
  6. python声音模拟_5秒钟让python克隆别人的声音
  7. html表格中加背景图片,html设置表格背景图片.doc
  8. Java泛型方法解惑
  9. 计算机程序员的英文求职面试,程序员英文面试自我介绍
  10. CRMEB开源商城部署在腾讯云