0

好的,这是我遇到的问题。有两个表用于处理博客评论和这些评论的评级。每次登录用户对帖子进行评分时,它都会在“commentrate”表中插入一个新行。'commentrate' 有 4 个字段。设置为 auto_increment、author_id、comment_id(已评级评论的 ID 号)的 ID,以及 1 到 5 级的评级本身。

实际评论表有一个commentid 字段,该字段将匹配commentrate 表中的comment_id。

我需要的是一个 Mysql 查询,它将使用其commentid 获取博客评论表中的每条评论,并将其与具有相同comment_id 的所有评级的平均值相匹配。

这样做的目的是建立一个评价最高的帖子页面。

我有一个查询,如果您指定comment_id,它将返回一个包含comment_id 和平均评分的结果集。但是,我无法使此查询适用于博客评论表中的每个评论 ID。该查询是:

SELECT commentrate.comment_id, AVG(commentrate.rating) from commentrate WHERE commentrate.comment_id=35

我尝试使用子查询和连接来实现这一点,但它不起作用或只会返回一行或会给我一条错误消息。我尝试过的查询将在下面发布。任何帮助,将不胜感激。几天来我一直徒劳地想弄清楚这一点。谢谢你。

SELECT bd_comments.commentid, bd_comments.comment FROM bd_comments WHERE bd_comments.commentid = ALL (SELECT commentrate.comment_id, floor(AVG(commentrate.rating)) from commentrate WHERE commentrate.comment_id=bd_comments.commentid)

错误:#1241 - 操作数应包含 1 列

SELECT bd_comments.commentid, bd_comments.comment FROM bd_comments WHERE bd_comments.commentid = ALL (SELECT commentrate.comment_id, floor(AVG(commentrate.rating)) from commentrate WHERE commentrate.comment_id=bd_comments.commentid)

错误:#1241 - 操作数应包含 1 列

4

2 回答 2

0

收到了这个答案,它完美地工作:

CREATE TABLE bd_comments(commentid int,comment varchar(10),author_id int);

CREATE TABLE commentrate (comment_id int, rating int, author_id int);

INSERT INTO bd_comments VALUES (1, "comment 1", 100), (2, "comment 2", 200), (3, "comment 3", 300);

INSERT INTO commentrate VALUES (1, 3.5, 100), (2, 4, 100), (3, 5, 100), (1, 2.5, 200), (2, 1, 200);这里是查询

SELECT cr.comment_id, floor(avg(cr.rating)) rating,c.comment, c.author_id FROM commentrate cr, bd_comments c WHERE cr.comment_id = c.commentid GROUP BY cr.comment_idOutput

| COMMENT_ID | 评级 | 评论 | 作者 ID | |------------|--------|------------|-----------| | 1 | 3 | 评论 1 | 100 | | 2 | 2 | 评论 2 | 200 | | 3 | 5 | 评论 3 | 300 |

于 2013-09-05T18:58:04.993 回答
0

我认为您只想将表格连接在一起并取平均值:

select bd.commentid, floor(avg(cr.rating))
from commentrate cr join
     bd_comments c
     on cr.comment_id = bd.commentid
group by bd.commentid;

如果您可以在博客评论表中有重复的评论,那么您可能需要:

select cr.comment_id, floor(avg(cr.rating))
from commentrate cr
where cr.comment_id in (select bd.commentid from bd_comments);
于 2013-08-30T03:12:26.213 回答