以下のクエリは、3つの異なる配列から緯度、経度、およびID入力を受け取るループ内(PHP内)です。配列内の各位置/キーについて、以下のクエリを使用して、最も近い地理的場所がテーブルから選択されます。配列ループ内でクエリの代わりに1つのMysqlクエリを使用するには?
通常、アレイのサイズは約500であるため、最も近い地理的な位置を見つける必要がある入力セットは500セットですので、時間がかかります。
私の質問:phpの入力配列を使用して一度に1つのクエリを使用し、各配列キーに最も近いすべての地理的位置のセットを選択する方法はありますか?
$sql="SELECT
id, d, tolon, tolat, du,
(3959 * acos(cos(radians($lat1))
* cos(radians(travel.tolat))
* cos(radians(travel.tolon) - radians($lon1))
+ sin(radians($lat1))
* sin(radians(travel.tolat)))) AS distance
FROM travel
WHERE userid = $id AND tolon > $lonlow AND tolon < $lonhigh AND tolat > $latlow AND tolat < $lathigh
having distance < $maxdistance ORDER BY distance
";
悪化したソリューションはUNIONになりますが、確かに良いアイデアが投稿されるでしょう。あなたは試してみましたか...または –
私は一時テーブルに配列を挿入しようとすると、定期的な結合を使用することができます。少なくともそれは出発点です – ingo
@ ingoジョインは、2つのテーブルの地理座標間の最小距離で定義されているので、ジョインするのは簡単ではありません。これは数式で計算されます。 – BastiaanWW