我有两个不同的查询。
此查询根据其回复计数器从“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专家,也不知道如何合并两个查询以收集具有以下条件的结果:
任何帮助都将受到高度赞赏。
谢谢!
答案 0 :(得分:3)
第二个查询中的having
子句看起来不正确。在没有group by
的情况下,不允许使用SQL的大多数方言。我忘记了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