gpt4 book ai didi

php - 在MYSQL中返回基于纬度/经度匹配距离查询的行数?

转载 作者:行者123 更新时间:2023-11-29 11:36:08 24 4
gpt4 key购买 nike

我使用这个查询来查找一定距离内的提供商,我知道这不是一个理想的方法,它只返回半准确的距离,但距离必须是计算次数过多,无法使用任何第三方 API。

SELECT ( 3959 * acos( cos( radians('28.65') ) * cos( radians( lat ) ) * cos( radians( lon ) - radians('-81.21') ) + sin( radians('28.65') ) * sin( radians( lat ) ) ) ) AS distance FROM providers HAVING distance < 10

这工作正常并返回 10 英里内的所有提供商,但是我想返回结果计数,如下所示:

SELECT COUNT(providers.id) AS rowcount, ( 3959 * acos( cos( radians('28.65') ) * cos( radians( lat ) ) * cos( radians( lon ) - radians('-81.21') ) + sin( radians('28.65') ) * sin( radians( lat ) ) ) ) AS distance FROM providers HAVING distance < 10

不幸的是,这不起作用。

是否有其他方法可以在查询中执行此操作,或者我必须在之后使用 PHP 计算行数?

最佳答案

您可以使用子查询:

SELECT COUNT(*) FROM (
SELECT (3959 * ACOS(COS(RADIANS('28.65')) * COS(RADIANS(`lat`)) * COS(RADIANS(`lon`) - RADIANS('-81.21')) + SIN(RADIANS('28.65')) * SIN(RADIANS(lat)))) AS distance
FROM providers
HAVING distance < 10
)

内部查询是您的原始查询,然后外部查询计算结果。

正如评论中提到的,您应该更改数据库以使用 MySQL 的 spatial data types ,这将允许您do this automaticallywith indexes使其更快。

关于php - 在MYSQL中返回基于纬度/经度匹配距离查询的行数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36559250/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com