Pertanyaan MySQL untuk Mencari Baris dalam Jejari Batu Tertentu
Apabila berurusan dengan pertanyaan pangkalan data yang melibatkan koordinat longitud dan latitud, ia menjadi penting untuk cekap mendapatkan semula baris yang berada dalam radius geografi tertentu. Untuk mencapai hasil yang tepat dalam radius 25 batu, pertanyaan berikut memanfaatkan formula matematik:
<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>
Pertanyaan ini menggunakan formula trigonometri untuk mengira jarak antara koordinat setiap baris dan latitud tengah tertentu ($lat ) dan longitud ($lon). Walau bagaimanapun, kadangkala ia mungkin menghasilkan hasil yang tidak tepat apabila dipanjangkan kepada radius yang lebih besar.
Pertanyaan Dipertingkat
Untuk hasil yang lebih tepat, pertimbangkan untuk menggunakan pertanyaan berikut:
<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>
Dalam pertanyaan ini, :lat dan :long mewakili latitud tengah dan longitud yang dilalui oleh pengguna, manakala lokasi ialah jadual yang mengandungi baris sasaran. :jarak ialah jejari yang dikehendaki dalam batu. Dengan menggantikan 3959 (jarak dari pusat Bumi ke permukaannya dalam batu) dengan 6371 (ditukar kepada kilometer), kilometer boleh digunakan sebaliknya.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Baris dengan Cekap dalam Radius Batu Tertentu menggunakan Pertanyaan MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!