Maison > Article > base de données > Comment rechercher efficacement des adresses dans une plage spécifique dans MySQL à l'aide de la formule Haversine ?
Requête MySQL pour sélectionner des coordonnées dans une plage spécifiée
Dans votre base de données, vous avez un grand nombre d'adresses, chacune avec sa propre latitude et la longitude. Vous cherchez à afficher uniquement les adresses situées dans un rayon de 8 km autour de l'emplacement d'un utilisateur spécifié sur une carte à l'aide de l'API Google Maps.
Pour éviter de récupérer inutilement tous les enregistrements et d'effectuer des calculs de distance en Java, ce qui serait inefficace, pensez à utiliser la formule Haversine dans votre requête MySQL. Cette formule calculera la distance entre deux points de la surface de la Terre. Voici la requête modifiée :
<code class="sql">SELECT *, (3959 * acos(cos(radians(?)) * cos(radians(lat)) * cos(radians(lng) - radians(?)) + sin(radians(?)) * sin(radians(lat)))) AS distance FROM your_table HAVING distance < 5</code>
Dans cette requête, remplacez les points d'interrogation (?) par les valeurs de latitude et de longitude pour l'emplacement de l'utilisateur ($lat et $lng de votre code Java). La colonne de distance stockera la distance entre chaque adresse et l'emplacement de l'utilisateur.
En utilisant cette requête, vous récupérerez uniquement les adresses qui se trouvent dans la plage spécifiée, optimisant ainsi les performances de votre requête.
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!