当前位置: 首页 > news >正文

mysql8计算商家距离,按照由近及远排序

要计算商家距离并按照距离排序,可以使用MySQL 8中的空间函数和索引。以下是一个例子:

  1. 创建商家表
    CREATE TABLE merchants (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50),location POINT,SPATIAL INDEX (location)
    ) Engine=InnoDB;
    

  2. 插入商家数据
    INSERT INTO merchants (name, location) VALUES
    ('商家A', ST_PointFromText('POINT(120.1435 30.2567)')),
    ('商家B', ST_PointFromText('POINT(120.1723 30.3249)')),
    ('商家C', ST_PointFromText('POINT(120.0674 30.2987)')),
    ('商家D', ST_PointFromText('POINT(119.9876 30.1459)')),
    ('商家E', ST_PointFromText('POINT(120.0452 30.1243)'));
    

  3. 查询距离最近的商家
    #默认是米
    SELECT id, name, ST_Distance_Sphere(location, ST_PointFromText('POINT(120.1325 30.2678)')) AS distance
    FROM merchants
    ORDER BY distance ASC;# 把米转换成公里
    SELECT id, name, CONCAT(ROUND(ST_Distance_Sphere(location, ST_PointFromText('POINT(113.597219 34.783522)'))/1000,2),'公里') AS distance
    FROM merchants
    ORDER BY distance ASC;
    

    在此示例中,ST_Distance_Sphere()函数用于计算两个点之间的球面距离(单位为米)。查询将返回距离指定坐标最近的商家,并按距离从近到远排序。

    注意:为了使此查询更有效率,需要使用空间索引idx_location

  4. 如果在添加索引时,出现了如下错误:All parts of a SPATIAL index must be NOT NULL

  5. 请执行如下语句:

    ALTER TABLE merchants MODIFY location point NOT NULL;
    ALTER TABLE merchants ADD SPATIAL INDEX (location);

http://www.lryc.cn/news/45162.html

相关文章:

  • c语言函数使用记录
  • VBA智慧办公4——符号运算及语法结构
  • ChatGPT角色扮演提示语
  • 【Java面试题】设计模式之七种结构性模式——代理模式、适配器模式、桥接模式、装饰模式、外观模式、享元模式、组合模式
  • 【从零开始学习 UVM】6.3、UVM 激励产生 —— start() 方法执行sequence详解
  • 「Python 机器学习」Matplotlib 数据探索
  • 3.24-3.26学习总结
  • OpenAI Translator 基于 ChatGPT API 的划词翻译工具
  • git常用指令---复习向
  • 安卓开发学习记录(持续学习)
  • 【redis】AOF日志:宕机了,Redis如何避免数据丢失
  • 第三章Vue中的Ajax
  • 在 Python3 中使用 JSON
  • 图神经网络GNN介绍
  • 【面试】TCP、UDP、Socket、HTTP网络编程面试题
  • Python语言的文件读写
  • 面向对象 ( 上 )
  • Node.js学习笔记——会话控制
  • tsconfig.json参数详解
  • Pyecharts Geo绘制可视化地图并展示坐标位置
  • 什么是Hbuilder?--前端工具IDE
  • 07-centos-更改数据源、打补丁、查看内核
  • flac格式如何转mp3,3种简单方法值得收藏
  • 停车位 蓝桥杯模拟
  • ftrace使用实战
  • 【C#进阶】C# 不安全代码
  • Docker安装部署ElasticSearch
  • 【新2023Q2模拟题JAVA】华为OD机试 - 快递业务站
  • OpenCV入门(二十四)快速学会OpenCV 23 傅里叶变换
  • 线段树合并