在MySQL中计算唯一行的数量

6
我正在使用PHP/MySQL构建评论系统。该评论系统具有一个很好的功能,允许用户突出显示文本(在数据库中存储为“selected_text”),并将突出显示的文本与用户所做的评论一起存储在数据库中。此外,我还将包含突出显示文本的段落作为INT进行存储。这些值都正确地存储在数据库中,但现在我想对它们进行处理。
我想创建“评论计数器”。这些评论计数器将放置在文章中的每个段落旁边,并显示针对该段落发表的评论总数。 “评论”:表结构的视觉概述如下:
我的最新查询尝试检索此信息的代码是: $distinct = mysql_query("SELECT COUNT(DISTINCT paragraph_id) FROM comments");
相应的PHP代码:
while ($result_three = mysql_fetch_array($distinct)) 
{ 
    echo $result_three['paragraph_id'];
}

现在,我认为我的做法可能有些错误。我考虑尝试运行一个查询,首先找到所有“DISTINCT段落ID”。接着,我会运行一个“for each”循环,计算这些“段落ID”的出现次数。
我目前正在使用的查询似乎无法实现我的目标。而且,我担心没有明确的方法将计数数据与“评论计数器”联系起来。
4个回答

7
如果我理解您的问题正确,您需要按paragraph_id进行分组。请尝试以下操作:
SELECT paragraph_id, COUNT(*)
FROM comments
GROUP BY paragraph_id

这很接近了。它计算唯一段落ID的数量。它输出的值是3。不完全是我要找的。我想检索像这样的内容:对于每个唯一的段落ID,请计算在该段落ID上进行的评论总数。 - tandy
不,它将返回提到每个“paragraph_id”的评论数量(即“comments”表中的行数)。在phpMyAdmin上运行以查看我的意思。 - bfavaretto
天啊,对不起,你是正确的。我道歉。当我使用PHP时,我得到了不同的结果。我想问题在于我没有从fetch_array引用正确的键。最终,结合了几个答案并调用别名,问题得以解决。感谢您的帮助! - tandy

5
基本上,您需要计算每个段落ID组中的评论数量。 正确的查询如下:
$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
}

这也是正确的。我尝试使用额外的PHP代码回答自己的问题,但是Stack Overflow不允许像我这样的新手在发布问题后8小时内这样做!:) 非常感谢。 - tandy

4
使用以下代码,应该可以正常工作。
$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 示例


这是获胜者。最终我修改了这段代码,排除了JOIN组件,并在comment_count之前加入了一个"AS"。然后我需要在PHP中回显: echo $result=['comment_count'];谢谢! - tandy
谢谢,这是一个很好的基础,可以让我构建我的查询,干杯。 - HeavyHead

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接