我在MySQL查询中有一个错误,但我不知道是什么
错误是
错误1064(42000):您的SQL语法有错误;检查 与您的MySQL服务器版本相对应的手册 在'sin(radians(30.9006547))* sin(radians(lat 幅度))),8)作为距第3行距'的距离
查询是
SELECT h.*
, ROUND(1.609344 * 3956 * acos( cos( radians(30.9006547) ) * cos( radians(latitude) ) *
cos( radians(longitude) - radians(30.8524007) ) sin( radians(30.9006547) ) * sin( radians(latitude) ) ) ,8) as distance
FROM helper h
where is_available = 1
and is_active = 1
and is_approved = 1
and ROUND((1.609344 * 3956 * acos( cos( radians(30.9006547) ) * cos( radians(latitude) ) *
cos( radians(longitude) - radians(30.8524007) )sin( radians(30.9006547) ) * sin( radians(latitude) ) ) ) ,8) <= 60
order
by distance LIMIT 3;
答案 0 :(得分:0)
在您的代码中,您错过了cos()和sin()之间的+
符号
SELECT h.*
, ROUND(1.609344 * 3956 * acos( cos( radians(30.9006547) ) * cos( radians(latitude) ) *
cos( radians(longitude) - radians(30.8524007) ) + /*<<<<<< here */
sin( radians(30.9006547) ) * sin( radians(latitude) ) ) ,8) as distance
FROM helper h
where is_available = 1
and is_active = 1
and is_approved = 1
and ROUND((1.609344 * 3956 * acos( cos( radians(30.9006547) ) * cos( radians(latitude) ) *
cos( radians(longitude) - radians(30.8524007) ) + /* <<<< and here */
sin( radians(30.9006547) ) * sin( radians(latitude) ) ) ) ,8) <= 60
order
by distance LIMIT 3;
答案 1 :(得分:0)
这是一个计算距离的函数示例,以公里为单位。如果喜欢,请使用它...并且不要忘了在构造函数前后更改定界符...
CREATE DEFINER=`root`@`localhost` FUNCTION `geo_distance_km`(lat1 double, lon1 double, lat2 double, lon2 double) RETURNS double
begin
declare R int DEFAULT 6372.8;
declare phi1 double;
declare phi2 double;
declare d_phi double;
declare d_lambda double;
declare a double;
declare c double;
declare d double;
set phi1 = radians(lat1);
set phi2 = radians(lat2);
set d_phi = radians(lat2-lat1);
set d_lambda = radians(lon2-lon1);
set a = sin(d_phi/2) * sin(d_phi/2) +
cos(phi1) * cos(phi2) *
sin(d_lambda/2) * sin(d_lambda/2);
set c = 2 * atan2(sqrt(a), sqrt(1-a));
set d = R * c;
return d;
end