2017-01-21 11 views
1

このクエリは正常に動作していますか?私は海流latittideと経度SQLで現在の緯度と経度を与えると周囲5kmの距離を取得する方法

SELECT 
    id, (
     3959 * acos (
     cos (radians(12.966958)) 
     * cos(radians(latitude)) 
     * cos(radians(longitude) - radians(80.1525835)) 
     + sin (radians(12.966958)) 
     * sin(radians(latitude)) 
    ) 
) AS distance 
FROM place 
HAVING distance < 5 ORDER BY distance 
+5

あなたが「どこで」ではなく、あなたのクエリに「持つ」のを使用しようとしました – denny

+0

テーブル構造を示し.canあなたは、エラーを取得するのですか? –

+0

@ arul-dass-dあなたがクエリーを形成した方法は正しくありません。チェックアウトhttp://dev.mysql.com/doc/refman/5.5/en/problems-with-alias.html。私は –

答えて

1

HAVINGを与えるとき このクエリを実行するためのいずれかのヘルプは、私はあなたが集計関数の後に結果をフィルタリングしたい場合にのみ使用されている5キロ、周囲の値をしたい - あなたがここにWHEREを使用する必要があります。また

標準SQLはWHERE句で列の別名への参照を禁止します。 WHERE句が と評価された場合、列の値がまだ決定されていない可能性があるため、この制限が課されます。

SELECT id, distance FROM(
SELECT 
    id, (
     3959 * acos (
     cos (radians(12.966958)) 
     * cos(radians(latitude)) 
     * cos(radians(longitude) - radians(80.1525835)) 
     + sin (radians(12.966958)) 
     * sin(radians(latitude)) 
    ) 
) AS distance 
FROM place) tmp 
WHERE tmp.distance >5 
ORDER by distance 
+0

"標準SQL ..."を説明する答えを書いた - それはqouteですか?それは論理的に完全に間違っているからです。 –

+0

@DuduMarkovitzこれを確認してください:http://dev.mysql.com/doc/refman/5.5/en/problems-with-alias.html –

+0

全く間違っている。 –

関連する問題