Mysql查询搜索帖子和评论,返回评论总数
我正试图写一个查询Mysql查询搜索帖子和评论,返回评论总数,mysql,sql,Mysql,Sql,我正试图写一个查询 在表格、帖子和评论中搜索字符串 如果任一表上存在匹配项,则返回匹配的帖子及其总评论数 我有: SELECT Posts.id, Comments.id, Count(DISTINCT Comments.id) FROM Posts LEFT JOIN Comments ON Comments.postid = Posts.id WHERE ( Posts.text LIKE '%test%' OR ( Comments.text LIKE '%tes
SELECT Posts.id, Comments.id, Count(DISTINCT Comments.id)
FROM Posts
LEFT JOIN Comments ON Comments.postid = Posts.id
WHERE ( Posts.text LIKE '%test%'
OR ( Comments.text LIKE '%test%'
AND Comments.deleted = false ) )
AND Posts.approved = true
AND Posts.deleted = false
GROUP BY Posts.id
此查询的问题是where正在筛选my Comments.id计数,因此它不会返回帖子中的评论总数,而是返回与“test”匹配的评论数。
如何在一个查询中实现我想要的?如果我理解正确,您希望所有帖子或评论包含感兴趣字符串的帖子。对于匹配的,您需要总评论计数 为此,请使用具有的
:
SELECT p.id, Count(c.id)
FROM Posts p JOIN
Comments c
ON c.postid = p.id
GROUP BY p.id
WHERE p.approved = true AND
p.deleted = false
HAVING p.text LIKE '%test%' OR
SUM( c.text LIKE '%test%' AND c.deleted = false ) > 0;
实际上,不需要GROUP BY
子句:
SELECT Posts.id,
( SELECT COUNT(*) FROM Comments c
WHERE c.postid = Posts.id AND c.deleted = false
) AS total_post_comments
FROM Posts
WHERE Posts.approved = true
AND Posts.deleted = false
AND (
Posts.text LIKE '%test%'
OR EXISTS(
SELECT 1 FROM Comments
WHERE Comments.text LIKE '%test%'
AND Comments.deleted = false
AND Comments.postid = Posts.id
)
)
请描述一下逻辑。您的查询比您描述的内容更多。发布一个包含当前输出和预期输出的示例数据。这不起作用。没有加入?不,在哪里条件之间?无法使其工作,您正确理解了我的问题。@david987。你遇到了什么问题?这很有效!我很好奇是否有一种不用子查询就能做到这一点的方法。