Bagaimana untuk Mendapatkan Baris dengan Cekap dalam Radius Batu Tertentu menggunakan Pertanyaan MySQL?

Patricia Arquette
Lepaskan: 2024-10-25 16:38:02
asal
867 orang telah melayarinya

How to Efficiently Retrieve Rows within a Specified Mile Radius using MySQL Queries?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!