mysql计数地理查询

时间:2012-03-05 00:18:40

标签: mysql

嗨,我对这个计数查询很难:

SELECT COUNT( * ) AS  `total`,
        ( 3959 * ACOS( COS( RADIANS( 45.77447 ) ) 
               * COS( RADIANS( c.latitude ) ) 
               * COS( RADIANS( c.longitude ) - RADIANS( 4.82785 ) ) 
               + SIN( RADIANS( 45.77447 ) ) 
               * SIN( RADIANS( c.latitude ) ) ) ) AS distance, `r` . * 
FROM  `adverts` AS  `a` 
INNER JOIN  `users` AS  `u` ON a.user_id = u.user_id
INNER JOIN  `location_city` AS  `c` ON a.location_id = c.city_id
INNER JOIN  `location_region` AS  `r` ON c.region_id = r.region_id
HAVING (distance <50)
LIMIT 1

这将返回表格中的广告总数,而不是总查询次数。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

如果您希望广告数量满足distance<50,其中distance是计算字段,则您必须执行子查询:

SELECT COUNT(*) as total FROM
(SELECT .. AS distance
 ...
 WHERE distance < 50)

(顺便说一下 - 我认为没有HAVING的{​​{1}}是有效的MySQL(但我可能错了)。

答案 1 :(得分:0)

因为我似乎无法在帖子中添加评论(仍然不确定如何)

您可以尝试添加

group by a.id
在LIMIT之前

..然而,更多地阅读您的帖子,您是否正在尝试计算其他数字,例如用户,位置和城市?如果是这样,您可能需要进行子查询。