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。你遇到了什么问题?这很有效!我很好奇是否有一种不用子查询就能做到这一点的方法。