2010-11-13 146 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