嗨,我有这样的桌子:

表条目:

id | total_comments
_____________________
1 | 0
2 | 0
3 | 0
4 | 0

表评论:

id |开斋节|评论
_____________________
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。

它不会为每个相同值的实例添加一个:这不是工作方式。将返回一个简单的布尔值是/否。

尝试:

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