2011-06-22 245 views
0

我试图从数据库中获取的坐标和位置,但我的服务器返回该错误:MySQL查询返回错误

Error: 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 
'long) - radians(0)) + sin(radians(0)) * sin(radians(lat)))) AS distanc' 
at line 1 

Query: 
SELECT id, 
    address, 
    name, 
    (3959 * acos(cos(radians(0)) * 
      cos(radians(lat)) * 
      cos(radians(long) - radians(0)) + 
      sin(radians(0)) * 
      sin(radians(lat))) 
    ) AS distance 
FROM places 
HAVING distance < 10 
ORDER BY distance 
LIMIT 0, 20; 

我必须逃离“LAT”和“长”与`或者是那个公式错了?谢谢。

另外,我使用的坐标是0,0(仅用于测试目的)。

+0

为什么你使用弧度(0),因为那只是零?无论如何,我能够使括号内的部分正确运行。 – 2011-06-22 16:08:27

+0

这些是我选择的测试坐标。 – iamandrus

回答

2

LONG是mysql中的保留字。将它用作列名时,使用反引号将其撤销。

+0

'+ 1'我相信这就是它 – Neal

+0

谢谢!我知道我忘了逃避什么。 :P – iamandrus

0

我想你有额外的)。试试这个

SELECT id, address, name, (3959 * acos(cos(radians(0)) * cos(radians(lat)) * cos(radians(long) - radians(0)) + sin(radians(0)) * sin(radians(lat))) AS distance FROM places HAVING distance < 10 ORDER BY distance LIMIT 0 , 20; 
+0

我没有看到'''' – Neal

1

用“WHERE”语句替换HAVING语句。没有“GROUP BY”,那么你为什么使用HAVING?

+1

MySQL允许你在没有'GROUP BY'的情况下使用'HAVING':From http://dev.mysql.com/doc/refman/5.1/en/select.html:“* SQL标准要求HAVING必须只引用GROUP BY子句中的列或聚合函数中使用的列,但MySQL支持此行为的扩展,并允许HAVING引用SELECT列表中的列和外部子查询中的列。“*我期望他/她正在这样做,因为'distance'是派生的列名称。无论是*好主意* ... –

+0

谢谢@ T.J。克劳德。 –