3

記事コメントの 2 つのテーブルがあります。それらの間には関連付けがあります。各コメントは、それが属する記事 IDを保持します。

-----------------------------
 articles
----+-------+----------------
 id | title | comments_count
----+-------+----------------
 1  |  aaa  |              0
 2  |  bbb  |              0
 3  |  ccc  |              0
 4  |  ddd  |              0
 5  |  eee  |              0
 6  |  fff  |              0

...

-------------------------------
 comments
----+-------------+------------
 id |        text | article_id
----+-------------+------------
 1  | aaa comment |          1
 2  | aaa comment |          1
 3  | fff comment |          6
 4  | bbb comment |          2
 5  | ddd comment |          4
 6  | bbb comment |          2

記事テーブルにはさらに、関連付けられたコメントの現在の数を保持する列があります。これは、記述されたテーブルの基本的なセットアップを備えたSQLFiddleです。

一連の記事コメントをインポートした後、すべての記事のcomments_countを更新して、関連するコメントの数を反映するにはどうすればよいですか?

4

2 に答える 2

4

このクエリを試してください:

UPDATE articles a
LEFT JOIN (
 SELECT
  article_id,
  count(*) as count
 FROM comments
 GROUP BY article_id
) AS b
ON a.id = b.article_id
SET comments_count = COALESCE(b.count, 0);

私はあなたのsqlfiddleでそれを使用し(スキーマセクションに配置する必要がありました)、すべての記事を選択すると正しいカウントが表示されました。

常に正しい値が設定されるように更新されました(複数回実行したり、削除したりした後などに実行できます)

于 2013-08-12T23:03:05.953 に答える
2

別の方法として、最も古典的なバージョン:

UPDATE articles a
SET comments_count= (
    SELECT count(*)
    FROM comments c
    WHERE a.id=c.article_id
);

効率を比較するためのベンチマークはありますか? 記録のために、ダニエルの答えがより効率的であると確信しています。

于 2013-08-12T23:16:19.020 に答える