0

だから、私は「ルート」が保存されているデータベースを持っています(つまり、緯度/経度形式「StartLat」、「StartLng」および「EndLat」、my「EndLng」の開始点と終了点)。現在、ユーザーはこれらのルートを出発地または目的地で検索できます (例: 「出発地が私の LatLng 位置から 5 マイル以内にあるルートを検索します。」)。開始点または終了点のいずれかで検索できます (たとえば、「このマーカーの範囲内で開始点を検索する」または「このマーカーの範囲内で終了点を検索する」)。

現在、Haversine 式に基づく SQL ルックアップを使用していますが、これは非常にうまく機能します。

私ができるようにしたいのは、2 つのクエリを 1 つの SQL 文字列に結合して、「始点が "Place A" から 'x' マイル以内にあり、終点が 'x' 以内にあるすべてのルートを検索できるようにすることです。数マイルの「Place B」。

これを行う最もエレガントな方法は、既存の SQL 文字列に結合を作成することだと思いますが、どうすればよいかわかりません!

現在の SQL 文字列は次のようになります。

SELECT ID, RouteCode, (3959 * acos(cos(radians('51.5073346')) * cos(radians( EndLat )) * cos(radians( EndLng ) - radians('-0.1276831')) + sin(radians('51.5073346')) * sin(radians( EndLat )))) AS distance FROM markers HAVING distance < 15

(上の例では、ユーザーは終点が座標 51.5073346, -0.1276831 から 15 マイル以内にあるすべてのルートを検索します。 LatLng の場合、EndLat と EndLng は StartLat と StartLng に置き換えられます)。

必要な SQL 文字列を作成するのに役立つ SQL コマンドを十分に理解している人はいますか?

4

1 に答える 1

3

join;は必要ありません。クエリに 2 つ目の条件を追加するだけです。

SELECT ID, 
       RouteCode, 
       (
           3959 * acos(cos(radians('51.5073346')) * cos(radians( EndLat )) * 
           cos(radians( EndLng ) - radians('-0.1276831')) + 
           sin(radians('51.5073346')) *      
           sin(radians( EndLat )))
       ) AS end_distance,
       (
           [similar calculation for start here]
       ) AS start_distance
    FROM markers 
    HAVING start_distance < 15 and end_distance < 15

概念的には、ajoinは別のテーブルからデータを追加するためのものです。同じテーブル内に別の要件を課したいだけです。

于 2013-01-16T10:51:15.340 に答える