MySQL クエリを使用して、指定したマイル半径内の行を効率的に取得する方法

Patricia Arquette
リリース: 2024-10-25 16:38:02
オリジナル
867 人が閲覧しました

How to Efficiently Retrieve Rows within a Specified Mile Radius using MySQL Queries?

指定されたマイル半径内の行を検索するための 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!