我正在使用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 paragraph_ids
的查询。接下来,我会为每个循环运行,计算paragraph_ids
出现的次数。
我现在正在处理的查询似乎没有实现我的目标。此外,我担心我没有明确的方法将计算的数据明确地附加到“评论计数器”。
答案 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']; }