2012-02-18 6 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構文でエラーが発生しています。 はライン1

で「範囲 LIMIT 0、20 BY HAVING範囲< 800 ORDERをUSER_SETTING範囲」 近くを使用する権利構文についてはMySQLサーバのバージョンに対応していること取扱説明書を確認し

答えて

0
を助けてくださいあなたはそれ以外の使用、 HAVINGを使用するために Group by句を追加する必要があり

:上

Where range < 800 
1

HAVING作品10 '列のみ。私はあなたの質問に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