近くのものがある町を選択してください

user2959229

私は、以下の例のように2つのテーブルを持っている、townsthings、との範囲内にある近くのもの持って町のリストを取得する必要がxその町のレコードからの距離を。緯度と経度は、距離の計算に使用されます。

私は他のいくつかの質問を見て、things特定の1つの町の記録を取得することができましたが、近くにthingsあるすべての町のリストを取得する方法が考えられませんx

結果として得られた町を、x距離内にある近くのものの数で並べ替えることができるのはボーナスです。

TOWNS
+--------+----------+---------+---------+
| townId | townName | townLat | townLng |
+--------+----------+---------+---------+
|      1 | town a   |     1.5 |     1.9 |
|      2 | town b   |     1.4 |     3.8 |
|      3 | town c   |     2.3 |     2.7 |
|      4 | town d   |     3.2 |     1.6 |
|    ... | ...      |     ... |     ... |
+--------+----------+---------+---------+

THINGS
+---------+-----------+----------+----------+
| thingId | thingName | thingLat | thingLng |
+---------+-----------+----------+----------+
|       1 | thing a   | 2.1      | 3.1      |
|       2 | thing b   | 1.1      | 2.3      |
|       3 | thing c   | 3.2      | 0.2      |
|       4 | thing d   | 1.3      | 1.1      |
|     ... | ...       | ...      | ...      |
+---------+-----------+----------+----------+

前もって感謝します

Tim Biegeleisen

CROSS JOIN町と物の可能なすべての組み合わせを取得してから、各町と物の間のハバーシン距離を計算することができます。私はSELECT DISTINCT、町が結果セットに1回だけリストされるようにするために使用します。

SELECT DISTINCT TOWNS.townName FROM
TOWNS CROSS JOIN THINGS
WHERE 3959 * acos( 
  cos(radians( TOWNS.townLat ))
* cos(radians( THINGS.thingLat ))
* cos(radians( TOWNS.townLng ) - radians( THINGS.thingLng ))
+ sin(radians( TOWNS.townLat )) 
* sin(radians( THINGS.thingLat ))
) < x

私が使用した式xはマイル単位です(地球の平均半径は3959マイルです)。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

IDが「ランダム」であるものを選択してください

分類Dev

明確で最新のものを選択してください

分類Dev

数字が続く文字のみを選択してください

分類Dev

Elasticsearchとは異なるものを選択してください

分類Dev

複数の制限のある値を選択してください

分類Dev

すべての介入にある製品を選択してください

分類Dev

Laravelの積極的な読み込み、関連するモデルがあるもののみを選択してください

分類Dev

毎年注文がある顧客のIDのみを選択してください

分類Dev

変数にも設定されているものを選択してください

分類Dev

特定の番号を持つものをすべて選択してください

分類Dev

Chromeで動作しない必要なものを選択してください

分類Dev

減算の絶対値が指定された値よりも小さい行を選択してください

分類Dev

複数選択、Jquery:少なくとも1つのオプションを選択する必要がある場合は、複数選択を確認してください

分類Dev

少なくとも1つのチェックボックスが選択されていることを確認してくださいphp

分類Dev

時間がなくなっているレコードのみを選択してください

分類Dev

角度のある素材:選択パネルを常に開いてください

分類Dev

複数の仕事があり、春に実行したい仕事を選択してください

分類Dev

兄弟のいない子供を選択してください

分類Dev

実際の高さを選択してください

分類Dev

階層が低い値のみを選択してください

分類Dev

2つの行のIDが同じである場合は、他の列の値が大きい方を選択してください

分類Dev

AndroidのGPS修正で使用される衛星を選択してください

分類Dev

要件の異なる2つの値を選択してください

分類Dev

少なくとも1つの数字を含むn-gramを選択してください

分類Dev

少なくとも1つのNULL値を持つ行を選択してください

分類Dev

範囲内の最小数を選択してください

分類Dev

最初の有効な式を選択してください

分類Dev

LaravelBladeのブール型を選択してください

分類Dev

次の値を選択してくださいfirebaseandroid

Related 関連記事

  1. 1

    IDが「ランダム」であるものを選択してください

  2. 2

    明確で最新のものを選択してください

  3. 3

    数字が続く文字のみを選択してください

  4. 4

    Elasticsearchとは異なるものを選択してください

  5. 5

    複数の制限のある値を選択してください

  6. 6

    すべての介入にある製品を選択してください

  7. 7

    Laravelの積極的な読み込み、関連するモデルがあるもののみを選択してください

  8. 8

    毎年注文がある顧客のIDのみを選択してください

  9. 9

    変数にも設定されているものを選択してください

  10. 10

    特定の番号を持つものをすべて選択してください

  11. 11

    Chromeで動作しない必要なものを選択してください

  12. 12

    減算の絶対値が指定された値よりも小さい行を選択してください

  13. 13

    複数選択、Jquery:少なくとも1つのオプションを選択する必要がある場合は、複数選択を確認してください

  14. 14

    少なくとも1つのチェックボックスが選択されていることを確認してくださいphp

  15. 15

    時間がなくなっているレコードのみを選択してください

  16. 16

    角度のある素材:選択パネルを常に開いてください

  17. 17

    複数の仕事があり、春に実行したい仕事を選択してください

  18. 18

    兄弟のいない子供を選択してください

  19. 19

    実際の高さを選択してください

  20. 20

    階層が低い値のみを選択してください

  21. 21

    2つの行のIDが同じである場合は、他の列の値が大きい方を選択してください

  22. 22

    AndroidのGPS修正で使用される衛星を選択してください

  23. 23

    要件の異なる2つの値を選択してください

  24. 24

    少なくとも1つの数字を含むn-gramを選択してください

  25. 25

    少なくとも1つのNULL値を持つ行を選択してください

  26. 26

    範囲内の最小数を選択してください

  27. 27

    最初の有効な式を選択してください

  28. 28

    LaravelBladeのブール型を選択してください

  29. 29

    次の値を選択してくださいfirebaseandroid

ホットタグ

アーカイブ