こんにちは私はこのようなテーブルを持っています:
テーブルエントリ:
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が本当に必要な場合は、それをVIEWにします。
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つ追加することはありません。これは、INの動作方法ではありません。 INは、単純なブール値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))