gpt4 book ai didi

php - Mysql查询以搜索圆形 float

转载 作者:可可西里 更新时间:2023-10-31 23:12:44 25 4
gpt4 key购买 nike

我有一张表,其中存储了城市及其坐标(纬度、经度)和天气信息。有可能用户搜索没有天气信息的城市,但附近的城市有。

此外,我不想按名称搜索城市,因为如果用另一种语言输入城市名称可能会发生变化,(例如基辅 - 基辅、日内瓦、日内瓦、Genf 等)坐标不会改变很多。

因此,我使用 google api 从城市名称获取经纬度,它返回如下内容:

基辅市:(谷歌)纬度:50.4501,经度= 30.5234(四舍五入为:50.45 - 30.52)

但是,在我的天气表中,这座城市拼写为 Kyiv,其坐标如下:纬度:50.4333,经度= 30.5167

那么现在,我将如何继续在我的天气表中搜索以搜索坐标的舍入值(存储为 float )

SELECT * FROM weather_cities WHERE Latitude='50.45' AND Longitude='30.52'

上面的查询将不起作用,因为 mysql 中的纬度 (50.4333) 将四舍五入为 50.44 而不是 50.45。如果我将精度降低到只有一位小数,它会起作用,但在其他情况下我会得到太多匹配的城市。

我想在不输出太多结果的情况下在 mysql 中搜索 float 到最接近/最近的值。你有什么建议我达到预期的结果?我使用 mysql 和 php。

我研究了这个解决方案:https://leehblue.com/match-a-float-in-mysql/还有这个:PHP How do I round down to two decimal places?但我卡住了。

最佳答案

对于浮点值,不使用相等性检查是标准的。相反,使用减法:

SELECT * FROM weather_cities WHERE ABS(Latitude-50.45)<0.01 AND ABS(Longitude-30.52)<0.01

您还可以按与圆角坐标的绝对距离进行排序,以获得距离最近的城市。这里的缺点是它不会使用纬度和经度的索引,因为您在数学表达式中使用这些字段。

关于php - Mysql查询以搜索圆形 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56481714/

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