Maison >base de données >tutoriel mysql >Comment récupérer efficacement des lignes dans un rayon de milles spécifié à l'aide de requêtes MySQL ?
Requête MySQL pour localiser des lignes dans un rayon de mille spécifié
Lorsque vous traitez des requêtes de base de données impliquant des coordonnées de longitude et de latitude, il devient essentiel de gérer efficacement récupérer les lignes tombant dans un rayon géographique spécifique. Pour obtenir des résultats précis dans un rayon de 25 miles, la requête suivante exploite une formule mathématique :
<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>
Cette requête utilise une formule trigonométrique pour calculer la distance entre les coordonnées de chaque ligne et une latitude centrale spécifiée ($lat ) et la longitude ($lon). Cependant, elle peut parfois produire des résultats inexacts lorsqu'elle est étendue à un rayon plus grand.
Requête améliorée
Pour des résultats plus précis, envisagez d'utiliser la requête suivante :
<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>
Dans cette requête, :lat et :long représentent la latitude et la longitude centrale transmises par l'utilisateur, tandis que location est la table contenant les lignes cibles. :la distance est le rayon souhaité en miles. En remplaçant 3959 (la distance entre le centre de la Terre et sa surface en miles) par 6371 (converti en kilomètres), les kilomètres peuvent être utilisés à la place.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!