13

嗨,我有这样的表:

表项:

编号 |
总评论 _____________________ 1
| 0
2 | 0
3 | 0
4 | 0

表评论:

编号 | 开斋节 | 评论
_____________________
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))

我得到的结果是:

表项:

编号 |
总评论 _____________________ 1
| 1
2 | 1
3 | 0
4 | 0

预期成绩 :

表项:

编号 |
总评论 _____________________ 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。

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

于 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 回答