需求如下:

商品有多个门店,用户使用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

使用到的工具和遇到的问题

1.经纬度测试 http://tool.yovisun.com/longlat/index.php?long1=30.298926&lat1=120.012484&long2=30.292783&lat2=120.008622

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 实现经纬度排序查找功能的更多相关文章

  1. 百度地图经纬度批量查找功能XGeocoding使用手册

    <XGeocoding使用手册> 1.下载XGeocoding V2 http://www.gpsspg.com/xgeocoding/download/ 2.解压XGeocoding_v ...

  2. 个人永久性免费-Excel催化剂功能第92波-地理地址与经纬度互转功能

    GPS设备和手机LBS的兴起,在地理信息存储过程中,在程序.应用级别是需要用经纬度去定位,而在数据分析的级别,特别是省市区镇街的分析,用到的是人可识别的文本类型存储,从设备中采集下来的数据和人工维护的 ...

  3. Vc数据库编程基础MySql数据库的表查询功能

    Vc数据库编程基础MySql数据库的表查询功能 一丶简介 不管是任何数据库.都会有查询功能.而且是很重要的功能.上一讲知识简单的讲解了表的查询所有. 那么这次我们需要掌握的则是. 1.使用select ...

  4. 个人永久性免费-Excel催化剂功能第80波-按条件查找数字,扩展原生查找功能

    Excel的查找替换功能,只能对文本类数据查找较为得力,若需查找数字类型的数据,如查找大于100的数字,就无能为力,此篇Excel催化剂补足其短板. Excel数据类型知识背景介绍 用好Excel,必 ...

  5. mysql卡顿问题查找和解决方法

    mysql卡顿问题查找和解决方法 版权一.所遇问题        写在前边的废话:今天面试阿里的时候问到过类似问题,以前做调优的时候都是现查现用,缺乏总结,面试时答得也不好,今天趁此机会做一个梳理,知 ...

  6. 在你的ASP.NET MVC中使用查找功能

    在程序中,使用查找功能是少之不了.今天在ASP.NET环境下演示一回. 在cshtml视图中,有三个文本框,让用户输入关键词,然后点击最右连的“搜索”铵钮,如果有结果将显示于下面. Html: 表格放 ...

  7. Sublime文本排序&查找重复行&删除重复行

    排序 按F9或者选择菜单:Edit > Sort Lines,对每行文本进行排序 查找重复行 排序好后,按Ctrl+F,调出查找面板 查找字符串: ^(.+)$[\r\n](^\1$[\r\n] ...

  8. 详解MySQL的用户密码过期功能

    这篇文章主要为大家详细介绍了MySQL的用户密码过期功能的相关资料,需要的朋友可以参考下   Payment Card Industry,即支付卡行业,PCI行业表示借记卡.信用卡.预付卡.电子钱包. ...

  9. Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题

    Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题 表更描述: 将mysql数据库中的worktask表添加ishaspic字段. 具体操作:(1)数据库worktask表新添是否有图片字 ...

随机推荐

  1. @Transactional什么情况才生效

    只有runtimeexception并且没有被try catch处理的异常才会回滚. 想要回滚,不要去try 还有一个坑时逻辑上的问题,之前总以为插入,更新后,返回值为0,@Transactional ...

  2. CentOS 7 firewalld详解,添加删除策略

    一.CentOS7中firewall防火墙 修改防火墙配置文件之前,需要对之前防火墙[/etc/firewalld/zones/public.xml]做好备份 重启防火墙后,需要确认防火墙状态和防火墙 ...

  3. sequelize时间自动格式化

    问题 每次查询datetime的字段,显示出来都是这种格式 2019-08-27T12:02:05.000Z 解决办法 初始化Sequelize的时候传入dialectOptions参数 let se ...

  4. 在.net core程序中使用EntityFrameok(非EF Core)

    最近用NoSQL较多写,用传统的EF到不多,但在一些.net core小程序中也小试牛刀过,不过当时用的是微软为.net core量身定制的Entity Framework Core,只是一些比较常规 ...

  5. Gallery -- 横向不断滚动 demo

    <%@ Page Language="C#" AutoEventWireup="true" %> <!DOCTYPE html> < ...

  6. Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析

    Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析 说明:Java生鲜电商平台中,由于服务进行了拆分,很多的业务服务导致了请求的网络延迟与性能消耗,对应的这些问题,我们 ...

  7. FCC---Animate Multiple Elements at Variable Rates---还可以改循环时间,达到不同律动频率的效果

    In the previous challenge, you changed the animation rates for two similarly animated elements by al ...

  8. react 地图可视化 cesium 篇

    Vue Function-based API RFC 一出来,感觉 vue 越来越像 react 了.新立项目,决定尝试下 react.js.下面是 react 集成 cesium,核心部分是 web ...

  9. 控件类——Button、UIControlState状态、title及其属性

    封装: 封装按钮:1.有提示文字 —>UILable 2.并且可以点击 —> UIControl UIButton:是一个按钮(系统已经把UIControl封装好了).  里面可以放文字. ...

  10. emmet的用法

    emmet 是一个提高前端开发效率的一个工具.emmet允许在html.xml.和css等文档中输入缩写,然后按tab键自动展开为完整的代码片段. 一.Sublime Text 3 安装插件Emmet ...