我正在尝试从数据库中获取距用户输入最近的位置(基于纬度和经度的最近商店),因此根据用户邮政编码,我将其转换为纬度和经度,并根据这些结果我需要搜索我的数据库以找到最接近这些值的商店。我保存了所有商店的纬度和经度,到目前为止(从查看以前的问题来看)我尝试过类似的方法:
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 值,0
或 1
- 它只会是 1
当值完全匹配到最后一个小数点时。不是很有趣。
这不是最近距离的原因有很多,但对于您的目的来说可能已经足够近了。以下是一些原因:
- 欧几里得距离取差的平方
- 两个纬度之间的距离取决于经度(从赤道上的大约 70 英里到两极的 0 英里不等)。
关于mysql - 获取数据库中最近的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23340328/