我想获得两个GeoPoints之间的距离(使用LatLong(,因为我从提供的解决方案[MySQL函数中编写了GETDDISTANCE函数来计算两个纬度和经度之间的距离。如果我独立调用函数,它的工作原理就像魅力一样。根据我的理解,我不能从MySQL中的Function返回ResultSet
,所以我创建了Procedure并在过程中调用了函数,如下所示:
DELIMITER $$
CREATE PROCEDURE GetNearByGeoPoints(IN Lat REAL, IN Longi REAL)
BEGIN
DECLARE v_max int;
DECLARE v_counter int unsigned default 0;
SET @v_max = (SELECT COUNT(*) FROM TransmitterPointsData);
START TRANSACTION;
WHILE v_counter < v_max
DO
SELECT @coverageID :=CoverageID, @tableLatitude := Latitude, @tableLongitude :=Longitude FROM TransmitterPointsData LIMIT v_counter,1;
SET @Dist= GETDISTANCE(Lat, Longi, tableLatitude, tableLongitude);
UPDATE TransmitterPointsData SET DynamicDistance = @Dist WHERE CoverageID= @coverageID;
set v_counter=v_counter+1;
END WHILE;
COMMIT;
SELECT * FROM TransmitterPointsData;
END $$
DELIMITER ;
我想做的是从用户那里获取一组LatLong参数,并将其与表中的每组LatLong进行比较。在得到函数的输出后,我将使用coverageID上的where条件更新TransmitterPointsData表。
到目前为止,这是我的第一个MySQL查询,我遵循了语法,但我不知道为什么要在DynammicDistance
列中获取所有null
值。
提前感谢
尝试用以下内容替换while循环:
UPDATE TransmitterPointsData
SET DynamicDistance = GETDISTANCE(Lat, Longi, Latitude, Longitude)
更短,并且可以通过限制+偏移来避免行选择的潜在问题(这充其量是一种糟糕的风格,更糟糕的是每次都会给你一个随机的行(。