2012-02-18 140 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