mysql - 获取数据库中最近的位置

标签 mysql sql database

我正在尝试从数据库中获取距用户输入最近的位置(基于纬度和经度的最近商店),因此根据用户邮政编码,我将其转换为纬度和经度,并根据这些结果我需要搜索我的数据库以找到最接近这些值的商店。我保存了所有商店的纬度和经度,到目前为止(从查看以前的问题来看)我尝试过类似的方法:

SELECT * 
FROM mystore_table 
WHERE `latitude` >=(51.5263472 * .9) AND `longitude` <=(-0.3830181 * 1.1) 
ORDER BY abs(latitude - 51.5263472 AND longitude - -0.3830181) limit 1;

当我运行这个查询时,它确实显示了一个结果,但它不是最近的商店,不确定它是否与负数有关,我的纬度和经度列都保存为十进制数据类型?

最佳答案

您在 order by 中有逻辑运算而不是算术运算。试试这个:

SELECT * 
FROM mystore_table 
WHERE `latitude` >=(51.5263472 * .9) AND `longitude` <=(-0.3830181 * 1.1) 
ORDER BY abs(latitude - 51.5263472) + abs(longitude - -0.3830181)
limit 1;

您原始版本中的 AND 将生成一个 bool 值,01 - 它只会是 1 当值完全匹配到最后一个小数点时。不是很有趣。

这不是最近距离的原因有很多,但对于您的目的来说可能已经足够近了。以下是一些原因:

  • 欧几里得距离取差的平方
  • 两个纬度之间的距离取决于经度(从赤道上的大约 70 英里到两极的 0 英里不等)。

关于mysql - 获取数据库中最近的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23340328/

相关文章:

c# - 为什么我的下拉列表没有填满文本框?

php - 删除mysql数据库所有表中的一条记录

mysql - 如何在IBM Datastage中的循环事件中使用参数?

python - mysql设置用户名和密码

mysql - SQL查询问题转MySQL

php - 在 SQL Server 上使用 PDO 时,为什么不能按列别名进行 ORDER BY?

sql - 使用 BULK INSERT 时忽略某些列

database - 位图索引有用吗

mysql - 如何获取MySQL中特定的列组合

mysql - 无法连接到我的网站上使用 wamp 创建的数据库