Heim > Datenbank > MySQL-Tutorial > Hauptteil

Wie kann ich mithilfe von MySQL-Abfragen effizient Zeilen innerhalb eines bestimmten Meilenradius abrufen?

Patricia Arquette
Freigeben: 2024-10-25 16:38:02
Original
867 Leute haben es durchsucht

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

MySQL-Abfrage zum Auffinden von Zeilen innerhalb eines bestimmten Meilenradius

Beim Umgang mit Datenbankabfragen, die Längen- und Breitengradkoordinaten betreffen, ist es wichtig, effizient zu sein Rufen Sie Zeilen ab, die in einen bestimmten geografischen Umkreis fallen. Um präzise Ergebnisse innerhalb eines 25-Meilen-Radius zu erzielen, nutzt die folgende Abfrage eine mathematische Formel:

<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>
Nach dem Login kopieren

Diese Abfrage verwendet eine trigonometrische Formel, um den Abstand zwischen den Koordinaten jeder Zeile und einem angegebenen mittleren Breitengrad ($lat) zu berechnen ) und Längengrad ($lon). Allerdings kann es gelegentlich zu ungenauen Ergebnissen kommen, wenn es auf einen größeren Radius erweitert wird.

Verbesserte Abfrage

Für genauere Ergebnisse sollten Sie die folgende Abfrage verwenden:

<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>
Nach dem Login kopieren

In dieser Abfrage stellen :lat und :long den vom Benutzer übergebenen mittleren Breiten- und Längengrad dar, während location die Tabelle mit den Zielzeilen ist. :distance ist der gewünschte Radius in Meilen. Durch Ersetzen von 3959 (der Abstand vom Erdmittelpunkt zur Erdoberfläche in Meilen) durch 6371 (umgerechnet in Kilometer) können stattdessen Kilometer verwendet werden.

Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe von MySQL-Abfragen effizient Zeilen innerhalb eines bestimmten Meilenradius abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!