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);

你可能感兴趣的:(mysql,数据库)