質問

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

テーブルエントリ:

ID | Total_comments
_____________________
1 | 0
2 | 0
3 | 0
4 | 0

表のコメント:

ID | eid |コメント
_____________________
1 | 1 |コメントSDFD
2 | 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

どんな助けも感謝します。

役に立ちましたか?

解決

使用する:

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))

他のヒント

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

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

これにより、Total_commentsテーブルを完全に更新するメンテナンスタスクを回避できます。

それはまさに私が期待するものです。 IDはあなたがそれを与えるセットにあるので、total_comments = total_comments + 1。

同じ値のインスタンスごとに1つを追加することはありません。それは、どのように機能するかではありません。単純なブールのyes/noを返します。

試す:

UPDATE entry
  SET total_comments = (SELECT COUNT(*) 
                        FROM comments
                        WHERE entry.id = comments.eid
                        GROUP BY id)
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))
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top