2012-01-30 63 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