获取最近的数据库位置

时间:2014-04-28 11:50:13

标签: 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;

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

1 个答案:

答案 0 :(得分:5)

你在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会产生一个布尔值,01 - 当值匹配时,它只会是1 完全到最后一个小数点。不是很有趣。

为什么这不是最近的距离有很多原因,但它可能足够接近您的目的。以下是一些原因:

  • 欧几里德距离将采用差异的平方
  • 两个纬度之间的距离取决于经度(从赤道约70英里到两极0)。