>  기사  >  데이터 베이스  >  ## 지정된 마일 반경 내에서 MySQL 행을 정확하게 쿼리하는 방법은 무엇입니까?

## 지정된 마일 반경 내에서 MySQL 행을 정확하게 쿼리하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-26 12:33:03599검색

## How to Accurately Query for MySQL Rows Within a Specified Mile Radius?

X마일 반경 내의 행에 대한 mySQL 경도 및 위도 쿼리

지리 공간 데이터가 포함된 대규모 데이터베이스 내에서는 행을 검색해야 하는 경우가 많습니다. 특정 위치의 특정 반경 내에 해당합니다. 이는 일반적으로 구면 기하학을 사용하여 구의 두 점 사이의 거리를 계산하는 방법입니다.

중심점에서 반경 25마일 내의 행을 찾는 쿼리 중 하나는 거리 범위가 86마일인 일부 부정확한 결과를 반환합니다. 800마일 떨어진 지점까지. 원래 쿼리는 다음과 같습니다.

<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>

이 문제를 해결하려면 매장 찾기 애플리케이션에서 성공적으로 구현된 솔루션을 기반으로 쿼리를 수정해 보겠습니다.

<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은 매개변수로 전달된 중심점의 위도와 경도를 나타냅니다.
  • lat 및 long은 데이터베이스에 저장된 위도 및 경도 값입니다.
  • :distance는 쿼리에 전달된 사용자 정의 거리 매개변수입니다.
  • 6371은 지구의 반경(마일)입니다.

이 업데이트된 쿼리를 사용하면 다음을 수행할 수 있습니다. 주어진 중앙 위치 주변의 지정된 마일 반경 내에 있는 행을 효과적으로 검색합니다.

위 내용은 ## 지정된 마일 반경 내에서 MySQL 행을 정확하게 쿼리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.