来自已知点查询的SQL位置

时间:2011-10-09 22:46:02

标签: mysql sql

我有一个带有下表的MySQL数据库

int - id
float 2,6 - long
float 2,6 - lat
int - radius

我想创建一个返回ID&距给定位置的距离(长和纬度)

我找到了以下代码:

SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) *
cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * 
sin( radians( lat ) ) ) ) AS distance FROM markers 
HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;

我想更改此查询以仅返回计算长度小于半径的行(我的表中的列) 用半径替换25不起作用。 有没有办法在不使用两个SQL查询的情况下实现这一目标?

1 个答案:

答案 0 :(得分:1)

出现问题,因为结果distance位于 float 中,而radius是整数数据类型,因此您需要将CAST半径设置为float。尝试以下

SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) *
cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * 
sin( radians( lat ) ) ) ) AS distance FROM markers 
HAVING distance < CAST (radius AS float) ORDER BY distance LIMIT 0 , 20;

快乐帮助:)