这可能看起来很常见。 我有兴趣找到所有的zipcodes和表格行中给出的zipcodes的距离,并将它们显示为一个表格。我尝试为此编写过程SQL但是我失败了。直到现在我只能将lat / long的单个zipcode硬编码到arcsine公式以获得相邻的拉链,我想检索表格中的所有拉链以及所有相邻的拉链和距离。
我发现难以遍历所有的zipcode并访问各自的Lat / Lng值
表的架构是
我的代码是:
CREATE PROCEDURE cursor_row()
BEGIN
DECLARE zip INT ;
DECLARE lat FLOAT ;
DECLARE lng FLOAT;
DECLARE zip_cursor CURSOR FOR
SELECT Zip_Code , lat_radians, lng_radians
FROM ZipLatLngRadians;
DECLARE CONTINUE handler FOR NOT found SET done=1;
SET done = 0 ;
OPEN zip_cursor;
zip_loop: LOOP
FETCH zip_cursor INTO zip , lat , lng;
IF done = 1 then leave zip_loop;
ELSE CALL zip_procedure(zip,lat,lng)
END IF;
END LOOP zip_loop;
CLOSE zip_cursor
DEALLOCATE zip_cursor
END ;
DELIMITER //
我不知道在两个程序中我实际上做错了什么
我需要在cursor_row()过程中调用zip_nearby()过程。因此cursor_row()可以循环遍历表的每一行并将zipcode,lat,long传递给zip_nearby()作为参数和zip_nearby()将给出其参数的结果,如下面在黑色背景图像中所示。
DELIMITER //
CREATE PROCEDURE zip_nearby (IN p_lat1 double,IN p_long1 double,IN p_radius
double)
BEGIN
SELECT (2*3956*ASIN( (SQRT( POWER(SIN(((lat_radians-p_lat1))/2),2) +
COS(p_lat1) * COS(lat_radians) * POWER(SIN(((abs(lng_radians)-
p_long1))/2),2) )) ) ) AS dist, Zip_Code FROM ZipLatLngRadians
WHERE (2*3956*ASIN( (SQRT( POWER(SIN(((lat_radians-p_lat1))/2),2) +
COS(p_lat1) * COS(lat_radians) * POWER(SIN(((abs(lng_radians)-
p_long1))/2),2) )) ) ) < p_radius ORDER BY dist;
END
//
DELIMITER ;
这是我通过在最左边的列中硬编码1个zip来获得的结果 我想找到最左边一列中的所有拉链和所有拉链 邻近的拉链和它们的距离