[转]

以下 SQL 语句将会在与坐标 37, -122 相距 25 英里的半径范围内查找最近的 20 个位置。该语句根据行的纬度/经度以及目标纬度/经度计算距离,然后只请求距离值小于 25 的行,最后再按距离对整个查询进行排序,并将查询结果限制为只显示 20 个。要按公里而非英里进行搜索,请将 3959 替换为 6371。

 

SELECT id, ( 3959 * acos( cos( radians( -122 ) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians( 37) ) + sin( radians( -122 ) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;