我刚在查询中遇到错误语法

时间:2019-12-04 12:37:38

标签: mysql mysql-error-1064

我在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;

2 个答案:

答案 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