[英]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专家,不知道如何合并两个查询来收集具有以下条件的结果:
任何帮助将受到高度赞赏。
谢谢!
第二个查询中的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.