2012-02-18 106 views
0

Hy!Mysql查询距离搜索失败

我的表:

CREATE TABLE IF NOT EXISTS `USER_SETTING` (
    `USER_ID` int(11) NOT NULL, 
    `LATITUDE` float(10,6) NOT NULL DEFAULT '0.000000', 
    `LONGITUDE` float(10,6) NOT NULL DEFAULT '0.000000', 
    `MINAGE` int(11) DEFAULT NULL, 
    `GENDER` varchar(1) DEFAULT NULL, 
    `DISTANCE` int(11) DEFAULT NULL, 
    `MAXAGE` int(11) NOT NULL, 
    PRIMARY KEY (`USER_ID`) 
) 

查询:

SELECT 
    user_id, 
    LONGITUDE, 
    LATITUDE, 
    MINAGE, 
    MAXAGE, 
    DISTANCE, 
    (
     6371 * acos(
       cos(
        radians(47.958153) 
       ) * cos(
        radians(LANGITUDE) 
       ) * cos(
        radians(LATITUDE) - radians(13.780375) 
       ) + sin(
        radians(47.958153) 
       ) * sin(
        radians(LANGITUDE) 
       ) 
      ) 
    ) AS range 
FROM 
    USER_SETTING 
HAVING 
    range < 800 
ORDER BY 
    range 
LIMIT 0, 20 

问题:

查询不起作用。

错误消息:

你有一个错误的SQL语法;检查 对应于你的MySQL服务器版本正确的语法在行使用 附近“的范围从USER_SETTING HAVING范围< 800 ORDER BY范围 LIMIT 0,20”手动1

请帮助

回答

0

您需要添加一个Group by条款才能使用HAVING,否则使用:

Where range < 800 
1

HAVING作品上只有10'ed列。由于我在您的查询中没有注意到任何GROUP,因此我将其修改为使用WHERE子句。

SELECT user_id, 
     LONGITUDE, 
     LATITUDE, 
     MINAGE, 
     MAXAGE, 
     DISTANCE, 
     (6371 * acos(cos(radians(47.958153)) * cos(radians(LANGITUDE)) * cos(radians(LATITUDE) - radians(13.780375)) + sin(radians(47.958153)) * sin(radians(LANGITUDE)))) AS range 
FROM USER_SETTING 
WHERE range < 800 
ORDER BY range 
LIMIT 0 , 20 
+0

不起作用.... – user547995 2012-02-19 16:55:03