计算MySQL中DISTINCT行的数量

时间:2012-01-30 18:36:03

标签: php mysql comments commenting

我正在使用PHP / MySQL构建评论系统。这个评论系统有一个很好的功能,它允许用户突出显示文本(在数据库中存储为“selected_text”),然后突出显示的文本将与用户发表的评论一起存储在数据库中。此外,我还将段落(突出显示的文本出现)存储为INT。这些值都存储在数据库中,但现在我想用它们做些什么。

我想创建“评论计数器”。这些评论计数器将放在文章中每个段落的旁边,它们将显示对该段落所做的评论总数他们是附属的。 “评论”的视觉概述:表格结构:

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出现的次数。

我现在正在处理的查询似乎没有实现我的目标。此外,我担心我没有明确的方法将计算的数据明确地附加到“评论计数器”。

4 个答案:

答案 0 :(得分:7)

如果我正确理解您的问题,您需要GROUP BY paragraph_id。试试这个:

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

答案 1 :(得分: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

答案 2 :(得分:4)

基本上,你需要计算每组段落中的注释。正确的查询如下:

$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
}

答案 3 :(得分:3)

使用下面的代码,这应该可行

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

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