2010-11-13 149 views
8

我有3个表:MySQL的 - 左连接和COUNT()

  1. 论坛

ID,名称,描述

  • 的主题
  • 的thread_id,forum_id,USER_ID,标题,内容,视图

  • 帖子
  • POST_ID,的thread_id,AUTHOR_ID,内容,日期

    我想要做的是获得论坛中的所有主题,并获得每个主题的帖子数。所以我得到每一个线程(WHERE forum_id = whatever),然后我左连接表格的帖子,以便计算结果。 但有些不起作用。这是我的查询:

    SELECT t.*, u.nick, COUNT(p.post_id) AS postcount 
        FROM 
        threads t 
        LEFT JOIN 
        users u 
        ON 
         u.id = t.user_id 
        LEFT JOIN 
        posts p 
        ON 
         p.thread_id = t.thread_id 
        WHERE 
        t.forum_id = $this->forumID 
    

    此查询将只显示(我认为)有任何职位的线程。我也尝试使用GROUP BY语句,但它使MySQL错误...

    我该如何解决这个问题?

    -----------编辑: 我尝试添加GROUP BY t.thread_id,但是,正如我以前说过,MySQL的错误:

    你有一个错误你的SQL语法;检查对应于你的MySQL服务器版本使用附近的正确语法手册 'WHERE t.forum_id = 2' 的第15行

    全面查询:

    SELECT t.*, u.nick, COUNT(p.post_id) AS postcount 
        FROM 
        threads t 
        LEFT JOIN 
        users u 
        ON 
         u.id = t.user_id 
        LEFT JOIN 
        posts p 
        ON 
         p.thread_id = t.thread_id 
        GROUP BY 
        t.thread_id 
        WHERE 
        t.forum_id = $this->forumID 
    

    编辑2:

    我的不好,我把GROUP BY声明放在了它不适合的地方。现在已经解决了。

    回答

    10

    GROUP BY是正确的道路要走,所以只需添加:GROUP BY t.thread_id

    0

    您应该添加GROUP BY t.thread_id, u.nick