我想得到两个GeoPoint之间的距离(使用LatLong),因为我从提供的解决方案[MySQL Function to calculate distance between two latitudes and longitudes中编写了GETDISTANCE函数。如果我独立调用函数,则它就像魅力一样工作。
根据我的理解,我无法从MySQL中的Function返回device?
,所以我创建了Procedure并在过程内部调用了function,如下所示:
ResultSet
我想做的是从用户那里获取一组LatLong参数,并将其与表中的每组LatLong进行比较。从函数获取输出后,我将使用coverageID的where条件更新TransmitterPointsData表。
到目前为止,这是我的第一个MySQL查询,我遵循语法,但是我不知道为什么要在 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 ;
列中获取所有null
值。
先谢谢您
答案 0 :(得分:0)
尝试用以下内容替换while循环:
magnolia-core.jar
要短得多,并且可以通过限制+偏移量避免行选择的潜在问题(这最好是较差的样式,每次都会给您随机行)。