0

我正在使用空间查询来查找给定纬度半径内的一些地方。并且很长。

select *, (3959 * ACOS(COS(radians(1.0)) * COS(radians(`lat`)) * COS(radians(`lng`) - radians(1.0)) + sin(radians(1.0)) * sin( radians(`lat`)))) AS distance
FROM table_name
HAVING distance <= 5
ORDER BY distance

这不返回任何值。查询有问题吗?

TIA。

4

1 回答 1

0

我怀疑问题是你没有GROUP BY条款。试试这个:

SELECT *
FROM (select *, (3959 * ACOS(COS(radians(1.0)) * COS(radians(`lat`)) * COS(radians(`lng`) - radians(1.0)) + sin(radians(1.0)) * sin( radians(`lat`)))) AS distance
      FROM table_name
     ) t
WHERE distance <= 5
ORDER BY distance

如果您使用的是 MySQL,文档明确警告不要使用HAVING(http://dev.mysql.com/doc/refman/5.0/en/select.html)。我认为查询不会在任何其他查询引擎中解析,所以我猜你正在使用 MySQL(如果它在子句中,SQL 标准将要求它在DISTINCT子句中)。GROUP BYHAVING

于 2012-12-13T14:21:53.473 回答