2012-01-30 66 views
4

我正在用PHP/MySQL構建一個評論系統。這個評論系統有一個很好的功能,它允許用戶突出顯示文本(在數據庫中存儲爲「selected_text」),然後將突出顯示的文本與用戶發表的評論一起存儲在數據庫中。此外,我還將該段(其中出現突出顯示的文本)作爲INT存儲。這些值都在數據庫中正確存儲,但現在我想與他們做一些事情。計算MySQL中DISTINCT行的數量

我想創建「評論計數器」。這些評論計數器將放置在文章中每個段落的旁邊,並且它們將顯示對其所附的段落所做的評論總數。的 「評論」 的直觀概述:表結構:

This is a view of the table structure

我最新的查詢試圖檢索這些信息是:

$distinct = mysql_query("SELECT COUNT(DISTINCT paragraph_id) FROM comments");

以及相應的PHP代碼:

while ($result_three = mysql_fetch_array($distinct)) 
{ 
    echo $result_three['paragraph_id']; 
} 

現在,我想我可能會以這種錯誤的方式去做。我曾考慮嘗試運行首先查找所有DISTINCT paragraph_ids的查詢。之後,我會爲每個循環運行一個,該循環計算這些paragraph_ids出現的次數。

任何幫助將不勝感激,因爲我現在正在處理的查詢似乎並沒有達到我的目標。另外,我擔心我沒有明確的方法將計數的數據明確地附加到「評論臺」。

回答

2

基本上,你需要計算各組段IDS的意見。正確的查詢如下:

$distinct = mysql_query("SELECT paragraph_id, (DISTINCT comment_id) as comment_count FROM comments GROUP BY paragraph_id"); 

while ($result_three = mysql_fetch_array($distinct)) 
{ 
    echo $result_three['paragraph_id']; // Gives the id of the paragraph 
    echo $result_three['comment_count']; // Gives the comment count for the associated paragraph 
} 
+0

這也是正確的。我試圖用額外的PHP代碼來回答我自己的問題,但它不會讓像我這樣的Stack Overflow新手在發佈問題後的8個小時內做到這一點! :) 非常感謝。 – tandy 2012-01-30 20:36:16

7

如果我正確理解你的問題,你需要GROUP BY paragraph_id。試試這個:

SELECT paragraph_id, COUNT(*) 
FROM comments 
GROUP BY paragraph_id 
+0

這就近了。它計算唯一的paragraph_ids的數量。它打印出來的值是3.不是我想要的。我試圖檢索如下所示的內容:對於每個獨特的paragraph_id,請計算對該paragraph_id所做的評論總數。 – tandy 2012-01-30 19:25:42

+0

不,它會返回提及每個'paragraph_id'的註釋數量('comments'表上的行數)。在phpMyAdmin上運行以查看我的意思。 – bfavaretto 2012-01-30 21:07:46

+0

我的天哪,對不起,你是對的。我很抱歉。使用PHP時,我得到了不同的結果。我認爲問題在於我沒有提到fetch_array中的正確密鑰。結果爲我工作的是結合了幾個答案,並最終打電話給一個別名。謝謝您的幫助! – tandy 2012-01-31 20:39:04

3

下面的代碼使用,這應該工作

$res = mysql_query("SELECT COUNT(DISTINCT paragraph_id) as cnt FROM comments"); 

while ($result_three = mysql_fetch_assoc($res)) { echo $result_three['cnt']; } 
4

它可能是你想也知道當有評論,你需要做一個外連接段落。

SELECT p.paragraph_id, 
     COUNT(c.comment_id) as comment_count 
FROM comments c 
     RIGHT JOIN paragraphs p 
     ON c.paragraph_id = p.paragraph_id 
GROUP BY p.paragraph_id 

這裏的工作data.se sample

+0

這是贏家。我最終通過排除JOIN組件來修改此代碼,並在comment_count之前包含了一個「AS」。 然後,我不得不在PHP中迴應到: 'echo $ result = ['comment_count'];' 謝謝! – tandy 2012-01-30 20:12:23

+0

謝謝你,是一個很好的基線來建立我的查詢,歡呼 – HeavyHead 2015-01-25 16:31:02