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表新添是否有图片字 ...
随机推荐
- MyEclipse构建maven项目报错
直接上图: 这里有三种方案: 1.检查jdk版本:最好换成1.8版本 项目右键-->build path-->configure build Path; 1.2 点击 libraries ...
- SqlServer,Oracle,db2,MySql查询表索引
SqlServer1. 查询表索引 SELECT 索引名称=a.name ,表名=c.name ,索引字段名=d.name ,索引字段位置=d.colid ,c.status FROM sysinde ...
- jenkins支持git分支发布
https://blog.csdn.net/wc1695040842/article/details/102228804 核心就是需要安装一个Git Parameter 的插件结合使用. 如果同时有多 ...
- CSAPP lab3 bufbomb-缓冲区溢出攻击实验(上)smoke fizz
前言 完成这个实验大概花费一天半的时间,看了很多大佬的博客,也踩了很多的坑,于是打算写一篇博客重新梳理一下思路和过程,大概会有两篇博客吧. CSAPP lab3 bufbomb-缓冲区溢出攻击实验(上 ...
- JQuery学习笔记(4)——ajax
AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML) 原生 例子 点击按钮,访问服务器上的ajax_info.txt文件,获得txt ...
- swoole 内存泄露的问题有没有好的办法解决
在传统的web开发模式中,我们知道,每一次php请求,都要经过php文件从磁盘上读取.初始化.词法解析.语法解析.编译等过程,而且还要与nginx或者apache通信,如果再涉及数据库的交互,还要再 ...
- centos 7 搭建Samba
一.Samba简介 Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,由客户端和服务端构成. SMB(Server Message Block的缩写,即服务器消息块)主要是作 ...
- LinuxShell脚本——函数
LinuxShell脚本——函数 摘要:本文主要学习了Shell中函数的定义和使用. 函数的定义 Shell函数的本质是一段可以重复使用的脚本代码,这段代码被提前编写好了,放在了指定的位置,使用时直接 ...
- JAVA 设置模块间的依赖关系
项目目录概况 Demo01项目 Test01.java package com.sam.demo01; public class Test01 { public void ShowTest01() { ...
- C++ static静态成员
01 基本概念 静态成员:在定义前面加了static关键词的成员. class A { public: A(int a, int b):m_a(a),m_b(b) { num += m_a + m_b ...