我正在尝试从数据库中获取用户输入的最近位置(基于纬度和经度的最近商店),因此根据用户邮政编码,我将其转换为纬度和经度,并根据这些结果我需要搜索我的数据库以查找离这些值最近的商店。我保存了所有商店的纬度和经度,到目前为止(从以前的问题看)我尝试过这样的事情:
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;
当我运行此查询时,它会显示结果,但它不是最近的商店,不确定它是否与负数有关,我的列纬度+经度都保存为十进制数据类型?
答案 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
会产生一个布尔值,0
或1
- 当值匹配时,它只会是1
完全到最后一个小数点。不是很有趣。
为什么这不是最近的距离有很多原因,但它可能足够接近您的目的。以下是一些原因: