mysql 实现经纬度排序查找功能
需求如下:
商品有多个门店,用户使用App时需要查找附近门店的商品,商品要进行去重分页。
思路:
1.确认mysql自带经纬度查询函数可以使用。
2.该需求需要利用分组排序,取每个商品最近门店的商品id,之后关联商品表获取商品信息即可。
3.mysql还是有很多限制。10w级数据处理时性能没问题,200ms以下可以接受。后续考虑使用其他方案代替
表结构
-- 建表
CREATE TABLE `store` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(32) NOT NULL,
`item_id` bigint(20) NOT NULL DEFAULT '0',
`longitude` double(50,6) NOT NULL COMMENT '经度',
`latitude` double(50,6) NOT NULL COMMENT '纬度',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- 写入数据
INSERT INTO `store` (`id`, `name`, `item_id`, `longitude`, `latitude`)
VALUES
(3, '欧美金融城_星爸爸', 1, 120.011496, 30.287637),
(4, '永乐城_星爸爸', 1, 120.011802, 30.280433),
(5, '小镇_一鸣', 2, 120.011209, 30.298552),
(6, '赛银国际', 2, 120.027181, 30.280808),
(7, '合景天峻_星爸爸', 1, 120.004597, 30.291660),
(8, '仓溢东苑_星爸爸', 1, 120.008622, 30.292783);
存储过程模拟10w数据
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `insert_store`()
begin
DECLARE v_i int unsigned DEFAULT 0;
WHILE v_i < 100000 DO
INSERT INTO `store` ( `name`, `item_id`, `longitude`, `latitude`, `distance`)
VALUES ( concat('合景天峻_星爸爸' , round(RAND() * 10000)) , RAND() * 1000, 120 + round(RAND(),6), 30 + round(RAND(),6), 0);
SET v_i = v_i+1;
END WHILE;
end;;
DELIMITER ;
分页10条,查询5公里内门店权益id
1.mysql5.7.5使用st_distance_sphere函数计算距离。
2.若出现sql_mode=only_full_group_by错误请参考下面链接4
select shop.*
from
(
select * ,round(st_distance_sphere(point(120.012484,30.298926),point(`longitude`,`latitude`))) dis
from test111.store
having dis < 5000
order by dis limit 100000 ) shop
group by shop.item_id
order by dis
limit 10
查询结果如图 - 查询离我最近的门店商品。按商品分页
参考 https://www.cnblogs.com/hdwang/p/9994153.html
使用到的工具和遇到的问题
2.mysql存储过程用于写入数据 https://www.cnblogs.com/jiangxiaobo/p/9214349.html
3.mysql分组排序去最新一条 https://blog.csdn.net/cz596738622/article/details/80253999
4.sql_mode=only_full_group_by错误参考处理 https://www.cnblogs.com/jpfss/p/10401753.html
mysql 实现经纬度排序查找功能的更多相关文章
- 百度地图经纬度批量查找功能XGeocoding使用手册
<XGeocoding使用手册> 1.下载XGeocoding V2 http://www.gpsspg.com/xgeocoding/download/ 2.解压XGeocoding_v ...
- 个人永久性免费-Excel催化剂功能第92波-地理地址与经纬度互转功能
GPS设备和手机LBS的兴起,在地理信息存储过程中,在程序.应用级别是需要用经纬度去定位,而在数据分析的级别,特别是省市区镇街的分析,用到的是人可识别的文本类型存储,从设备中采集下来的数据和人工维护的 ...
- Vc数据库编程基础MySql数据库的表查询功能
Vc数据库编程基础MySql数据库的表查询功能 一丶简介 不管是任何数据库.都会有查询功能.而且是很重要的功能.上一讲知识简单的讲解了表的查询所有. 那么这次我们需要掌握的则是. 1.使用select ...
- 个人永久性免费-Excel催化剂功能第80波-按条件查找数字,扩展原生查找功能
Excel的查找替换功能,只能对文本类数据查找较为得力,若需查找数字类型的数据,如查找大于100的数字,就无能为力,此篇Excel催化剂补足其短板. Excel数据类型知识背景介绍 用好Excel,必 ...
- mysql卡顿问题查找和解决方法
mysql卡顿问题查找和解决方法 版权一.所遇问题 写在前边的废话:今天面试阿里的时候问到过类似问题,以前做调优的时候都是现查现用,缺乏总结,面试时答得也不好,今天趁此机会做一个梳理,知 ...
- 在你的ASP.NET MVC中使用查找功能
在程序中,使用查找功能是少之不了.今天在ASP.NET环境下演示一回. 在cshtml视图中,有三个文本框,让用户输入关键词,然后点击最右连的“搜索”铵钮,如果有结果将显示于下面. Html: 表格放 ...
- Sublime文本排序&查找重复行&删除重复行
排序 按F9或者选择菜单:Edit > Sort Lines,对每行文本进行排序 查找重复行 排序好后,按Ctrl+F,调出查找面板 查找字符串: ^(.+)$[\r\n](^\1$[\r\n] ...
- 详解MySQL的用户密码过期功能
这篇文章主要为大家详细介绍了MySQL的用户密码过期功能的相关资料,需要的朋友可以参考下 Payment Card Industry,即支付卡行业,PCI行业表示借记卡.信用卡.预付卡.电子钱包. ...
- Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题
Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题 表更描述: 将mysql数据库中的worktask表添加ishaspic字段. 具体操作:(1)数据库worktask表新添是否有图片字 ...
随机推荐
- python TKinter的主窗口运行程序完毕后,怎么让其自动关闭
如题: 在pycharm 调试Tkinter程序的时候,关闭右上角的X 实际上并未退出进程,长期以往 再大的内存也会被耗尽. 一般就是下面的代码: """ from tk ...
- 拎壶带你冲----教育类mysql用户表设计参考
说起用户表,大概是每个应用/网站立项动工(码农们)考虑的第一件事情.用户表结构的设计,算是整个后台架构的基石.如果基石不稳,待到后面需求跟进了发现不能应付,回过头来反复修改用户表,要大大小小作改动的地 ...
- vscode开发微信小程序使用less(插件Easy WXLESS)
1.搜索按照Easy WXLESS 2.在文件中加入下面的一行代码:就会在同级目录下同步代码到.wss // out: index.wxss 更多的写法可以查官网:https://marketplac ...
- 朋友想玩下百度的ORC我鼓捣鼓捣thinkphp3集成百度sdk
他想玩的是文字识别 那就玩下 咱们开始 1 先到百度文字识别 添加个应用 这样就有了APPID API KEY SECRET KEY https://console.bce.baidu.com ...
- 前端之json,ajax和jsonp
json json是 JavaScript Object Notation 的首字母缩写,单词的意思是javascript对象表示法,这里说的json指的是类似于javascript对象的一种数据格式 ...
- JQuery学习笔记(2)——数组 属性 事件
each遍历 JQueryObjectArray.each(function(index,Element)) $(".myTable").each(function(i,ele){ ...
- ASP.NET Core快速入门--学习笔记系列文章索引目录
课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 抓住国庆假期的尾巴完成了此系列课程的学习笔记输出! ASP.NET Core快 ...
- Web前端基础(2):HTML(二)
1. body中的相关标签 1.1 标题标签:hn HTML提供<hn>系列标签,用于修饰标签,包含:<h1>.<h2>.<h3>.<h4> ...
- PlayJava Day006
今日所学: /* 2019.08.19开始学习,此为补档. */ 构造方法没有返回值(即return为空). this:实例(对象)的引用. JVM:①static方法区:存静态数据 ②栈区:引用 ...
- django6-orm进阶操作
1.创建django环境的脚本 在自定义脚本中操作orm ,但是自定义脚本中不具备django的环境 ###test.py 脚本,引入django的环境即可使用orm操作数据库import os if ...