InおよびSubqueryを使用したMySQLの更新
-
24-10-2019 - |
質問
こんにちは私はこのようなテーブルを持っています:
テーブルエントリ:
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))