1

我有这两个不同的查询。

此查询根据回复计数器从“posts”表中提取记录。此查询仅返回带有回复的帖子:

SELECT posts.title, posts.num, posts.status, COUNT( posts_replies.post_num)  AS count
FROM posts_replies
INNER JOIN posts ON ( posts_replies.post_num = posts.num )
WHERE posts.status = 1
AND posts.category='uncategorized'
GROUP BY posts.num

这是一个新查询,我想与上述查询合并,以根据 gps 提取和排序记录。

SELECT num, title, ( 3959 * acos( cos( radians( 37 ) ) * cos( radians( lat ) ) * cos( radians( lon ) - radians( -122 ) ) + sin( radians( 37 ) ) * sin( radians( lat ) ) ) ) AS distance
FROM posts
HAVING distance <75
ORDER BY distance

此查询使用 lat 和 long 列来返回用户 75 英里半径内的记录。

我不是 sql 专家,不知道如何合并两个查询以收集具有以下条件的结果:

  1. 仅返回带有回复的帖子
  2. 按距离排序
  3. 按回复数排序

任何帮助将不胜感激。

谢谢!

4

1 回答 1

3

第二个查询中的having子句看起来不正确。在大多数 SQL 方言中,如果没有group by. 我忘记了 MySQL t 是否隐式将整个查询视为聚合(返回一行),或者是否将其having转换为where. 无论哪种情况,您都应该明确并where在没有聚合时使用。

您可以通过放入where子句来组合它们。我会用子查询来做,以使变量定义更清晰:

      SELECT p.title, p.num, p.status, p.distance,
             COUNT( p_replies.post_num)  AS count
      FROM posts_replies pr  INNER JOIN
           (select p.*,
                   ( 3959 * acos( cos( radians( 37 ) ) * cos( radians( lat ) ) * cos( radians( lon ) - radians( -122 ) ) + sin( radians( 37 ) ) * sin( radians( lat ) ) ) ) AS distance
            from posts p
           ) p
           ON pr.post_num = p.num
      WHERE p.status = 1 AND
            p.category='uncategorized' and
            distance < 75
      GROUP BY p.num
      order by distance
于 2012-12-09T15:55:54.803 回答