У меня есть следующий код:
CREATE FUNCTION CalculateDistance
(`Code1` VARCHAR(8), `Code2` VARCHAR(8)) RETURNS FLOAT
BEGIN
DECLARE Code1Lat FLOAT;
DECLARE Code1Long FLOAT;
DECLARE Code2Lat FLOAT;
DECLARE Code2Long FLOAT;
DECLARE DLat FLOAT;
DECLARE DLong FLOAT;
DECLARE A FLOAT;
DECLARE C FLOAT;
Code1Lat = SELECT `lat` FROM `vb_postcodes` WHERE `code` LIKE Code1;
Code1Long = SELECT `lng` FROM `vb_postcodes` WHERE `code` LIKE Code1;
Code2Lat = SELECT `lat` FROM `vb_postcodes` WHERE `code` LIKE Code2;
Code2Long = SELECT `lng` FROM `vb_postcodes` WHERE `code` LIKE Code2;
DLat = (Code2Lat - Code1Lat) * PI() / 180;
DLong = (Code2Long - Code1Long) * PI() / 180;
Code1Lat = Code1Lat * PI() / 180;
Code2Lat = Code2Lat * PI() / 180;
A = (SIN(DLat / 2) * SIN(DLat / 2)) + (SIN(DLong / 2) * SIN(DLong / 2)) * COS(Lat1) * COS(Lat2);
C = 2 * ATAN2(SQRT(A), SQRT(1 - A));
Return (3960 * C);
END
Это формула гаверсинуса, которая рассчитает расстояние между двумя координатами. Координаты хранятся в таблице vb_postcodes
с атрибутами: код, долгота и широта. Когда я пытаюсь выполнить код, я получаю синтаксическую ошибку.
Пожалуйста, извините за мои проблемы, это первый раз, когда я делаю пользовательскую функцию.
lat
FROMvb_postcodes
WHEREcode
LIKE Code1; SET Code1Long = S' в строке 12 - person user2879284   schedule 15.01.2014code
LIKE Code1; напишите WHERE 'code' LIKE CONCAT(%,Code1,%) и сделайте это во всех местах во всех 4 запросах. - person Pawan   schedule 15.01.2014