首页 >

mysql怎么用地理位置排序 |mysql or 走索引

mysql的ssh,MySQL怎么转SQLServer,qt读取mysql中文乱码,mysql 什么是标识列,mysql 中的循环,mysql or 走索引mysql怎么用地理位置排序 |mysql or 走索引

首先,在建表的时候需要说明经纬度的数据类型,可以使用DECIMAL类型。例如:

CREATE TABLE `places` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`latitude` decimal(10,8) NOT NULL,
`longitude` decimal(10,8) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

接下来需要添加地理位置索引,这样在查询过程中速度会更快。大家可以使用MySQL的空间扩展(Spatial Extensions)来实现,它提供了GeoHash、Point、LineString、Polygon等功能。添加空间扩展可以通过以下命令:

CREATE TABLE `places` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`point` point NOT NULL,
PRIMARY KEY (`id`),
SPATIAL INDEX `index_point` (`point`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

现在,大家可以通过经纬度求出两个位置之间的距离,然后将结果作为排序依据。MySQL提供了ST_DISTANCE_SPHERE函数,大家可以通过以下方式使用:

SELECT id, name, latitude, longitude,
ST_DISTANCE_SPHERE(POINT(longitude, latitude), POINT($longitude, $latitude))
AS distance
FROM places
ORDER BY distance ASC;

其中,$longitude和$latitude是待查询的点的经纬度。

最后,大家还可以限制查询范围,只查询一定半径内的数据。这里大家使用ST_WITHIN函数来实现:

SELECT id, name, latitude, longitude,
ST_DISTANCE_SPHERE(POINT(longitude, latitude), POINT($longitude, $latitude))
AS distance
FROM places
WHERE ST_WITHIN(POINT(longitude, latitude), 
CIRCLE(POINT($longitude, $latitude), $radius))
ORDER BY distance ASC;

其中,$radius是查询半径。

以上就是使用MySQL实现地理位置排序的方法,希望对大家有所帮助。


mysql怎么用地理位置排序 |mysql or 走索引
  • mysql --install |mysql5.1数据库
  • mysql --install |mysql5.1数据库 | mysql --install |mysql5.1数据库 ...

    mysql怎么用地理位置排序 |mysql or 走索引
  • mysql每次导出一千条 |ssh 调用mysql函数
  • mysql每次导出一千条 |ssh 调用mysql函数 | mysql每次导出一千条 |ssh 调用mysql函数 ...

    mysql怎么用地理位置排序 |mysql or 走索引
  • js如何访问mysql数据库数据(详解前端与后端的数据交互方式) |如何查看mysql主从状态
  • js如何访问mysql数据库数据(详解前端与后端的数据交互方式) |如何查看mysql主从状态 | js如何访问mysql数据库数据(详解前端与后端的数据交互方式) |如何查看mysql主从状态 ...