Heim  >  Artikel  >  Datenbank  >  ## Wie kann ich MySQL-Zeilen innerhalb eines bestimmten Meilenradius genau abfragen?

## Wie kann ich MySQL-Zeilen innerhalb eines bestimmten Meilenradius genau abfragen?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-26 12:33:03599Durchsuche

## How to Accurately Query for MySQL Rows Within a Specified Mile Radius?

MySQL-Abfrage von Längen- und Breitengraden für Zeilen innerhalb eines X-Meilen-Radius

Innerhalb einer großen Datenbank mit Geodaten ist es häufig erforderlich, Zeilen abzurufen die in einen bestimmten Umkreis eines bestimmten Ortes fallen. Dies wird üblicherweise mithilfe der sphärischen Geometrie erreicht, um den Abstand zwischen zwei Punkten auf einer Kugel zu berechnen.

Eine solche Abfrage zum Suchen von Zeilen innerhalb eines 25-Meilen-Radius um einen Mittelpunkt liefert einige ungenaue Ergebnisse mit Abständen im Bereich von 86 bis 800 Meilen von der Marke entfernt. Hier ist die ursprüngliche Abfrage:

<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>

Um dieses Problem zu beheben, ändern wir die Abfrage basierend auf einer Lösung, die erfolgreich in einer Filialsuche-Anwendung implementiert wurde:

<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>

In dieser Überarbeitung query:

  • :lat und :long stellen den Breiten- und Längengrad des als Parameter übergebenen Mittelpunkts dar.
  • lat und long sind die in der Datenbank gespeicherten Breiten- und Längengrade.
  • :Entfernung ist ein benutzerdefinierter Entfernungsparameter, der an die Abfrage übergeben wird.
  • 6371 ist der Erdradius in Meilen.

Mit dieser aktualisierten Abfrage können Sie dies tun Rufen Sie effektiv Zeilen ab, die innerhalb eines bestimmten Meilenradius um einen bestimmten zentralen Ort liegen.

Das obige ist der detaillierte Inhalt von## Wie kann ich MySQL-Zeilen innerhalb eines bestimmten Meilenradius genau abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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