2014-03-07 45 views
0

我正在使用php,mysql和html構建一個論壇。系統使用四個表格(MESSAGES_CATEGORIES,MESSAGES_TOPICS,MESSAGES_POSTS,CRM)來保存類別,主題,帖子和客戶聯繫方式。下面的第二個sql語句應該檢索特定類別的所有主題列表,包括auto的相關名字和姓氏以及每個主題發佈的郵件數量。MySQL語句計算每個帖子不能正常工作的帖子

第二個用於統計每個主題的發佈消息數量的部分似乎出錯了,我很難得到正確的語法。

//this sql statement without counting works fine 
$sqlquery0 = "SELECT MESSAGES_TOPICS.*, CRM.firstname,CRM.lastname " 
     . "FROM MESSAGES_TOPICS INNER JOIN CRM " 
     . "ON MESSAGES_TOPICS.topic_by=CRM.userid AND topic_cat = ".$val1." " 
     . "ORDER BY MESSAGES_TOPICS.topic_date DESC"; 

//this sql statement with counting does not work 
$sqlquery0 = "SELECT MESSAGES_TOPICS.*, CRM.firstname,CRM.lastname, COUNT(MESSAGES_POSTS.post_id) " 
     . "FROM MESSAGES_TOPICS INNER JOIN CRM " 
     . "ON MESSAGES_TOPICS.topic_by=CRM.userid AND topic_cat = ".$val1." " 
      . "INNER JOIN MESSAGES_POSTS " 
     . "ORDER BY MESSAGES_TOPICS.topic_date DESC"; 
+1

您尚未定義「*似乎出錯*」的含義。您尚未指定用於加入「MESSAGES_POSTS」的謂詞。你正在使用一個沒有'GROUP BY'子句的集合函數,所以MySQL會隱式地分組所有記錄(併爲其他列選擇不確定的值)。 – eggyal

+0

您的帖子表中沒有ON子句 - 並且您沒有GROUP BY子句 – Strawberry

回答

0

我假設你是說第二條語句語法不正確,而不是它只是產生錯誤的結果....

我沒有使用MySQL的一段時間,但SQL的一般規則是使用像count這樣的聚合函數,您還需要使用Group By子句。

+1

如[GROUP BY(Aggregate)Functions](https://dev.mysql.com/doc/en/group-by 「*如果你在一個不包含'GROUP BY'子句的語句中使用一個組函數,它就相當於對所有行進行分組。*」這個查詢是完全有效的,在語法上(假設'$ val1'是一個有效的SQL文字)。 – eggyal

+0

thnx既可供您評論;我創建了另一個簡單的SQL語句「$ sqlquery1 =」SELECT COUNT(*)FROM MESSAGES_POSTS GROUP BY post_topic「;」哪些工作。但是現在我努力將該語句與上面代碼中的第一個合併在一起... – Joppo