Maison > base de données > tutoriel mysql > le corps du texte

Comment récupérer efficacement des lignes dans un rayon de milles spécifié à l'aide de requêtes MySQL ?

Patricia Arquette
Libérer: 2024-10-25 16:38:02
original
867 Les gens l'ont consulté

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

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!