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

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/

    10-13 06:44