首页 > 数据库 > mysql教程 > 如何使用MySQL查询高效检索指定英里半径内的行?

如何使用MySQL查询高效检索指定英里半径内的行?

Patricia Arquette
发布: 2024-10-25 16:38:02
原创
969 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板