指定されたマイル半径内の行を検索するための MySQL クエリ
経度と緯度の座標を含むデータベース クエリを処理する場合、効率的に特定の地理的半径内にある行を取得します。半径 25 マイル以内で正確な結果を得るために、次のクエリでは数式を利用します。
<code class="sql">SELECT *,(((acos(sin(($lat*pi()/180)) * sin((`latitude`*pi()/180))+cos(($lat*pi()/180)) * cos((`latitude`*pi()/180)) * cos((($lon - `longitude`)*pi()/180))))*180/pi())*60*1.1515) AS `distance` FROM `geo_locations` HAVING `distance` <= 25 ORDER BY `distance` ASC</code>
このクエリでは、三角関数の公式を使用して、各行の座標と指定された中心緯度 ($lat) の間の距離を計算します。 ) と経度 ($lon)。ただし、より大きな範囲に拡張すると、不正確な結果が生成される場合があります。
クエリの改善
より正確な結果を得るには、次のクエリの使用を検討してください:
<code class="sql">SELECT `id`, ( 6371 * acos( cos( radians( :lat ) ) * cos( radians( `lat` ) ) * cos( radians( `long` ) - radians( :long ) ) + sin(radians(:lat)) * sin(radians(`lat`)) ) ) `distance` FROM `location` HAVING `distance` < :distance ORDER BY `distance` LIMIT 25</code>
このクエリでは、:lat と :long はユーザーによって渡された中心の緯度と経度を表し、location はターゲット行を含むテーブルです。 : distance は、目的の半径をマイル単位で指定します。 3959 (地球の中心から地表までの距離をマイル単位) を 6371 (キロメートルに変換) に置き換えることで、キロメートルを代わりに使用できます。
以上がMySQL クエリを使用して、指定したマイル半径内の行を効率的に取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。