计算MySQL坐标并更新行

计算MySQL坐标并更新行,mysql,sql,loops,coordinates,distance,Mysql,Sql,Loops,Coordinates,Distance,我需要遍历一个带有坐标(lat,long在同一列中)的表,并将它们与给定值进行比较。如果距离小于1 km,则更新与该条件相关的行的另一列 大概是这样的: Foreach row in Table if CalculateDistance(lat1,long1,lat2,long2) < 1 Update row.Column2 我更新表的存储过程如下: CREATE DEFINER=`root`@`localhost` PROCEDURE `turn_camera_on`(coordon

我需要遍历一个带有坐标(lat,long在同一列中)的表,并将它们与给定值进行比较。如果距离小于1 km,则更新与该条件相关的行的另一列

大概是这样的:

Foreach row in Table
if CalculateDistance(lat1,long1,lat2,long2) < 1
Update row.Column2
我更新表的存储过程如下:

CREATE DEFINER=`root`@`localhost` PROCEDURE `turn_camera_on`(coordonates varchar(50))
BEGIN

DECLARE lat1 varchar(50);
DECLARE long1 varchar(50);

SET lat1 = strSplit(coordonates, ',', 1);
SET long1 = strSplit(coordonates, ',', 2);

UPDATE deviceinfo
SET CameraOn = 1
where CalculateDistance(lat1,long1,**lat2,long2**) < 1;

END
CREATE DEFINER=`root`@`localhost`PROCEDURE`打开摄像头`(coordonates varchar(50))
开始
声明lat1 varchar(50);
声明long1 varchar(50);
设置lat1=strSplit(坐标,',',1);
SET long1=strSplit(coordonates,',',2);
更新设备信息
设置CameraOn=1
其中计算距离(lat1,long1,**lat2,long2**)<1;
结束

问题在于lat2和long2是一行中的字符串,在表中…

大概这就是您想要的:

DECLARE v_lat1 varchar(50);
DECLARE v_long1 varchar(50);

SET lat1 = strSplit(v_coordinates, ',', 1);
SET long1 = strSplit(v_coordinates, ',', 2);
UPDATE deviceinfo di
    SET CameraOn = 1
WHERE CalculateDistance(v_lat1, v_long1, strSplit(di.coordinates, ',', 1), strSplit(di.coordinates, ',', 2)) < 1;
此外,请注意:

  • 始终定义表别名(上述查询中的
    di
  • 始终限定列名(上述查询中的
    di.
  • 为变量和参数名添加前缀,以便它们不会与上述查询中的列(
    v
    )混淆

更新my_表格集column2=x,其中Calcu….<1或是你的问题,关于如何突破横向和纵向。从他们的共同专栏?我想斯特拉贝里游戏给了我答案。我会尽快回来更新只需在表中包含lat2,long2的任何列上使用
strSplit
函数;就像您使用
coordonates
获得lat1和long1一样。
DECLARE v_lat1 varchar(50);
DECLARE v_long1 varchar(50);

SET lat1 = strSplit(v_coordinates, ',', 1);
SET long1 = strSplit(v_coordinates, ',', 2);
UPDATE deviceinfo di
    SET CameraOn = 1
WHERE CalculateDistance(v_lat1, v_long1, strSplit(di.coordinates, ',', 1), strSplit(di.coordinates, ',', 2)) < 1;
UPDATE deviceinfo di
    SET CameraOn = 1
WHERE CalculateDistance(substring_index(v_coordinates, ',', 1),
                        substring_index(v_coordinates, ',', -1),
                        substring_index(di.coordinates, ',', 1),
                        substring_index(di.coordinates, ',', -1);