Heim >Datenbank >MySQL-Tutorial >Wie kann ich mithilfe von MySQL-Abfragen effizient Zeilen innerhalb eines bestimmten Meilenradius abrufen?
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>
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>
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!