Il y a quelques jours, un client a fait une telle demande : un site Web mobile de commande de nourriture, interroger les hôtels dans un rayon de 5 kilomètres de l'emplacement actuel, puis le client peut aller manger.
Après avoir reçu cette demande, je ne savais pas par où commencer. J'y ai réfléchi tranquillement et j'ai ajouté deux champs au tableau de l'hôtel pour stocker la longitude et la latitude de l'hôtel. Lors de la commande d'un repas, le téléphone portable était obligatoire. pour obtenir la longitude et la latitude actuelles de l'emplacement du client sont passées en revue, puis calculées avec la longitude et la latitude de l'hôtel dans la base de données pour le savoir.
Afin d'interroger la distance entre deux points dans la base de données, cette fonction doit être définie dans la base de données.
J'ai longtemps cherché en ligne mais je n'ai pas trouvé cette fonction. Finalement, j'ai résolu ce problème avec l'aide d'un ami sur CSDN. Je suis très reconnaissant à lordbaby de m'avoir fourni cette fonction. J'ai mis cette fonction ici pour aider plus d'amis qui le souhaitent.
Le code est le suivant :
--计算地球上两个坐标点(经度,纬度)之间距离sql函数 --作者:lordbaby --整理:www.aspbc.com CREATE FUNCTION [dbo].[fnGetDistance](@LatBegin REAL, @LngBegin REAL, @LatEnd REAL, @LngEnd REAL) RETURNS FLOAT AS BEGIN --距离(千米) DECLARE @Distance REAL DECLARE @EARTH_RADIUS REAL SET @EARTH_RADIUS = 6378.137 DECLARE @RadLatBegin REAL,@RadLatEnd REAL,@RadLatDiff REAL,@RadLngDiff REAL SET @RadLatBegin = @LatBegin *PI()/180.0 SET @RadLatEnd = @LatEnd *PI()/180.0 SET @RadLatDiff = @RadLatBegin - @RadLatEnd SET @RadLngDiff = @LngBegin *PI()/180.0 - @LngEnd *PI()/180.0 SET @Distance = 2 *ASIN(SQRT(POWER(SIN(@RadLatDiff/2), 2)+COS(@RadLatBegin)*COS(@RadLatEnd)*POWER(SIN(@RadLngDiff/2), 2))) SET @Distance = @Distance * @EARTH_RADIUS --SET @Distance = Round(@Distance * 10000) / 10000 RETURN @Distance END
-跟坐标距离小于5公里的数据 SELECT * FROM 商家表名 WHERE dbo.fnGetDistance(121.4625,31.220937,longitude,latitude) < 5
La longitude et la latitude ici sont respectivement les champs de longitude et de latitude de l'hôtel, et 121.4625,31.220937 sont la longitude de l'actuel client obtenu par le téléphone portable, suivi des 5 moyens dans un rayon de 5 kilomètres.
[Recommandations associées]
1. Tutoriel vidéo en ligne MySQL gratuit
2. Dernier tutoriel manuel MySQL
.3.Chuanzhi Podcast Liu Daocheng MySql series Tutoriels vidéo
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!