mysql-表未从过程更新

uelo1irk  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(368)

我想得到两个地球点之间的距离(使用latlong),因为我从提供的解决方案[mysql函数]中编写了getdistance函数来计算两个纬度和经度之间的距离。如果我独立调用函数,它就像魅力一样。据我所知,我不能回来了 ResultSet 从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 ;

我要做的是从用户那里获取一组latlong参数,并将其与表中的每一组latlong参数进行比较。在得到函数的输出后,我用coverageid上的where条件更新transmitterpointsdata表。
这是我的第一个mysql查询到目前为止,我是以下语法,但我不知道为什么我得到所有 null 中的值 DynammicDistance 列。
先谢谢你

mm5n2pyu

mm5n2pyu1#

尝试用以下内容替换while循环:

UPDATE TransmitterPointsData
SET DynamicDistance = GETDISTANCE(Lat, Longi, Latitude, Longitude)

要短得多,而且可以通过limit+offset避免行选择的潜在问题(最好是糟糕的样式,每次都会给您一个随机行)。

相关问题