MySQL 查詢指定英里半徑內的行
在處理涉及經緯度坐標的數據庫查詢時,高效的查詢變得至關重要檢索落在特定地理半徑內的行。為了在 25 英里半徑內獲得精確結果,以下查詢利用數學公式:
<code class="sql">SELECT *,(((acos(sin(($lat*pi()/180)) * sin((`latitude`*pi()/180))+cos(($lat*pi()/180)) * cos((`latitude`*pi()/180)) * cos((($lon - `longitude`)*pi()/180))))*180/pi())*60*1.1515) AS `distance` FROM `geo_locations` HAVING `distance` <= 25 ORDER BY `distance` ASC</code>
此查詢使用三角公式來計算每行坐標與指定中心緯度 ($lat ) 和經度 ($lon)。但是,當擴展到更大的半徑時,它有時可能會產生不準確的結果。
改進的查詢
要獲得更精確的結果,請考慮使用以下查詢:
<code class="sql">SELECT `id`, ( 6371 * acos( cos( radians( :lat ) ) * cos( radians( `lat` ) ) * cos( radians( `long` ) - radians( :long ) ) + sin(radians(:lat)) * sin(radians(`lat`)) ) ) `distance` FROM `location` HAVING `distance` < :distance ORDER BY `distance` LIMIT 25</code>
在此查詢中,:lat和:long 表示使用者傳遞的中心緯度和經度,而location 是包含目標行的表。 :distance 是所需的半徑(以英里為單位)。將 3959(從地球中心到其表面的距離,以英里為單位)替換為 6371(轉換為公里),就可以使用公里來代替。
以上是如何使用MySQL查詢高效檢索指定英里半徑內的行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!