我正在使用空间查询来查找给定lat的半径中的某些位置。而且很长。
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。
答案 0 :(得分: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 BY
子句中,如果它在HAVING
条款)。