こんにちは皆さん、私は以下のテーブルをセットアップしています:
Articles:
ID | TITLE | CONTENT | USER | NUM_COMMENTS
COMMENTS
ID | ARTICLE_ID | TEXT
次のような記事に対して行われたコメントのカウントで、articlesテーブルのNUM_Commentsフィールドを更新するSQLステートメントが必要です。
update articles a, comments f
set a.num_comments = COUNT(f.`id`)
where f.article_id = a.id
上記のsqlは機能せず、Invalid Use fo Group関数エラーが表示されます。ここではMySQLを使用しています。
更新ステートメントに結合することはできません。そのはず
update articles
set num_comments =
(select count (*) from comments
where comments.article_id = articles.id)
これにより、articlesテーブル全体が更新されますが、これは必要なものではない場合があります。 1つの記事のみを更新する場合は、サブクエリの後に「where」句を追加します。
これは動作するはずです。
UPDATE articles a SET num_comments =
(SELECT COUNT(*) FROM comments c WHERE c.article_id = a.id)
しかし、コメントが投稿された場合は、1つのレコードのみを更新します。
UPDATE articles a SET num_comments =
(SELECT COUNT(*) FROM comments c WHERE c.article_id = 100) WHERE a.id = 100
count(*)は、特にcountと(*)...
sqliteでsqlを使用する場合、pgsqlは次のようになります。
update articles
set num_comments =
(select count(id) from comments
where comments.article_id = articles.id)
列数だけに基づいて更新するには、次のようなことができます。
update articles,
(select count (*)
from comments
where comments.article_id = articles.id) as newtotals
set articles.num_comments = newtotals.count;
または...ローリングカウントが必要な状況がある場合:
update articles,
(select (count (*)) + (articles.num_comments) as count
from comments
join articles on
comments.article_id = articles.id
group by articles.id) as newtotals
set articles.num_comments = newtotals.count;