[轉]
以下 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;