0

わかりました、ここに私が抱えている問題があります。ブログのコメントとそれらのコメントの評価を処理するための 2 つのテーブルがあります。ログインしたユーザーが投稿を評価するたびに、「commentrate」テーブルに新しい行が挿入されます。「commentrate」には 4 つのフィールドがあります。auto_increment、author_id、comment_id (評価されたコメントの ID 番号) に設定された ID、および 1 から 5 のスケールでの評価自体。

実際のコメントのテーブルには、commentrate テーブルの comment_id と一致する commentid フィールドがあります。

必要なのは、commentid を使用してブログ コメント テーブルの各コメントを取得し、同じ comment_id を持つすべての評価の平均に一致させる Mysql クエリです。

これの目的は、評価の高い投稿ページを作成することです。

comment_id を指定すると、comment_id と評価の平均を含む結果セットが返されるというクエリがあります。ただし、ブログ コメント テーブルの各コメント ID に対してこのクエリを機能させることはできません。そのクエリは次のとおりです。

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

サブクエリと結合を使用してこれを実現しようとしましたが、機能しないか、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 列を含める必要があります

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

テーブルを結合して平均を取りたいだけだと思います:

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 に答える
0

この回答を受け取り、完全に機能します:

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

CREATE TABLE コメントレート ( comment_id int 、 rating int 、 author_id int );

INSERT INTO bd_comments VALUES (1, "コメント 1", 100), (2, "コメント 2", 200), (3, "コメント 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 | 評価 | コメント | AUTHOR_ID | |------------|--------|----------|----------| | | 1 | 3 | コメント 1 | 100 | | | 2 | 2 | コメント 2 | 200 | | | 3 | 5 | コメント 3 | 300 |

于 2013-09-05T18:58:04.993 に答える