13

こんにちは、私はこのようなテーブルを持っています:

テーブル エントリ :

ID | total_comments
___________________________________
1 | 0
2 | 0
3 | 0
4 | 0

表のコメント:

ID | イード | コメント
___________________________________
1 | 1 | コメント
_ 1 | テスト テスト
3 | 1 | コメントテキスト
4 | 2 | ダミーコメント
5 | 2 | サンプル コメント
6 | 1 | fg fgh dfh

私が書くクエリ:

UPDATE entry 
   SET total_comments = total_comments + 1 
 WHERE id IN ( SELECT eid 
                 FROM comments 
                WHERE id IN (1,2,3,4,5,6))

私が得る結果は次のとおりです。

テーブル エントリ :

ID | total_comments
___________________________________
1 | 1
2 | 1
3 | 0
4 | 0

予想された結果 :

テーブル エントリ :

ID | total_comments
___________________________________
1 | 4
2 | 2
3 | 0
4 | 0

どんな助けでも大歓迎です。

4

5 に答える 5

20

使用する:

UPDATE entry 
   SET total_comments = (SELECT COUNT(*)
                           FROM COMMENTS c
                          WHERE c.eid = id
                       GROUP BY c.eid)
 WHERE id IN ( SELECT eid 
                 FROM comments 
                WHERE id IN (1,2,3,4,5,6))
于 2010-06-07T21:04:43.047 に答える
3

別のテーブルに total_comments が本当に必要な場合は、それを VIEW にします。

CREATE VIEW entry AS 
  SELECT id, COUNT(comments) AS total_comment 
  FROM comments 
  GROUP BY id

このようにして、total_comments テーブル全体を更新するメンテナンス タスクを回避できます。

于 2010-06-07T21:03:59.717 に答える
1

それはまさに私が期待するものです。id は指定したセットに含まれているため、total_comments = total_comments + 1 です。

同じ値のインスタンスごとに 1 つ追加するつもりはありません。それは IN の仕組みではありません。IN は単純なブール値の yes/no を返します。

于 2010-06-07T21:02:51.960 に答える
1

試す:

UPDATE entry
  SET total_comments = (SELECT COUNT(*) 
                        FROM comments
                        WHERE entry.id = comments.eid
                        GROUP BY id)
于 2010-06-07T21:03:30.570 に答える
0
UPDATE entry e 
    SET total_comments = ( SELECT COUNT(*) FROM comments WHERE eid = e.id)  
    WHERE 
    e.id in (SELECT eid FROM comments WHERE id IN (1,2,3,4,5,6))
于 2010-06-08T15:00:22.893 に答える