Reputation: 842
I have a query which calculates the distance with given lat and lng and POINT
s.
Now i want to make it a function:
DELIMITER $$
CREATE FUNCTION CalculateDistance(geobreite double, geolaenge double, umkreis int) RETURNS INT READS SQL DATA
BEGIN
SET @ibk_laenge = geobreite;
SET @ibk_breite = geolaenge;
SET @umkreis = umkreis;
SET @breite_nord = @ibk_breite + (@umkreis / 111);
SET @breite_sued = @ibk_breite - (@umkreis / 111);
SET @laenge_west = @ibk_laenge - (@umkreis / ABS(COS(RADIANS(@ibk_breite))) * 111);
SET @laenge_ost = @ibk_laenge + (@umkreis / ABS(COS(RADIANS(@ibk_breite))) * 111);
SET @mp = CONCAT('MULTIPOINT(', @breite_sued , ' ', @laenge_west, ', ', @breite_nord, ' ', @laenge_ost, ')');
SET @quadrat = ENVELOPE(GEOMFROMTEXT(@mp));
RETURN
SELECT (
FLOOR(
SQRT(
POW((@ibk_breite - sub.breite) * 111, 2) +
POW((@ibk_laenge - sub.laenge) * 111 * ABS(COS(RADIANS(@ibk_breite))),2)
)
)
) AS distanz
FROM
(
SELECT Y(location) AS laenge, X(location) AS breite FROM meetings WHERE MBRCONTAINS(@quadrat, location)
)
AS sub;
END; $$
DELIMITER ;
But it throws an error:
1064 - You have an error in your SQL syntax; check the manual that >corresponds to your MySQL server version for the right syntax to use near
'SELECT (
FLOOR(
SQRT(
POW((@i' at line 18
If i execute the query with phpmyadmin it works without any problems.
Upvotes: 0
Views: 77
Reputation: 121922
To fix syntax error try to wrap SELECT query to brackets, e.g. -
RETURN (SELECT column1 FROM table WHERE id = 1);
Next problem: function must return one scalar value, if SELECT query returns some records, you will get an error.
Also, you can use SELECT...INTO query to write value to variable, and after just return it:
SELECT FLOOR(SQRT(...)) INTO @ret FROM ...;
RETURN @ret;
Upvotes: 1