如果你想在mysql数据库里查找附近的人,你需要把每个人的地理位置(经度和纬度)存储在数据库里。
一种可能的地理位置数据库设计是这样的:
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`latitude` double NOT NULL,
`longitude` double NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
然后你可以根据设定的经纬度和范围通过下面的mysql查询语句找出附近的人:
SELECT id, name, latitude, longitude, (
6371 * acos (
cos ( radians(YOUR_LATITUDE) )
* cos( radians( latitude ) )
* cos( radians( longitude ) - radians(YOUR_LONGITUDE) )
+ sin ( radians(YOUR_LATITUDE) )
* sin( radians( latitude ) )
)
) AS distance
FROM users
HAVING distance < YOUR_DISTANCE
ORDER BY distance
LIMIT 0 , 20;
在这个查询中,YOUR_LATITUDE
, YOUR_LONGITUDE
, and YOUR_DISTANCE
必须被设定为当前人的位置和你想搜索的范围(通常以km为单位)。链接: https://developers.google.com/maps/solutions/store-locator/clothing-store-locator#findnearsql
这个查询的中心思想是根据经纬度来计算两点之间的距离,然后找出距离在指定范围内的用户。注意这个计算是在地球是个完美的球体假设下进行的,如果需要更精确的计算,你需要使用更复杂的公式或者使用专门的地理位置数据库如PostGIS。
另外,这是一个全表扫描的操作,如果用户量大的话,运行可能会比较慢,可以考虑使用更合适的数据结构比如Geohash或者使用专门的地理位置搜索引擎比如Elasticsearch。
发布者:luotuoemo,转转请注明出处:https://www.jintuiyun.com/173510.html