繁体   English   中英

SQL:要合并的两个不同查询

[英]SQL: Two different queries to merge

我有这两个不同的查询。

此查询根据其回复计数器从“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. 按回复数量排序

任何帮助将受到高度赞赏。

谢谢!

第二个查询中的having子句看起来不正确。 在没有group by情况下,大多数SQL方言都是不允许group by 我忘记了MySQL是否隐式将整个查询视为聚合(返回一行)或者将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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM