Update a column with a COUNT of other fields is SQL?
嗨,伙计们,我准备好了下表:
我需要一个SQL语句,它用针对文章的注释数更新文章表的num_comments字段,如:
上面的SQL不起作用,我得到一个无效的use fo group函数错误。我在这里使用MySQL。
在UPDATE语句中不能有联接。应该是
1 2 3 4 |
这将更新整个项目表,这可能不是您想要的。如果您只想更新一篇文章,那么在子查询后添加一个"where"子句。
这应该有效。
但我希望在发布评论时只更新一条记录:
1 2 |
count(*)可能有一些问题,特别是在count和(*)之间有空格…
因此,在sqlite上使用SQL,pgsql将是:
1 2 3 4 |
要仅根据列计数进行更新,可以执行以下操作:
(select count (*)
from comments
where comments.article_id = articles.id) as newtotals
set articles.num_comments = newtotals.count;
或者…如果您遇到需要滚动计数的情况:
(select (count (*)) + (articles.num_comments) as count
from comments
join articles on
comments.article_id = articles.id
group by articles.id) as newtotals
set articles.num_comments = newtotals.count;
不能用一般的内部联接方式进行此操作。但你可以通过另一种方式做到:
1-从文章表中选择所有ID
2-迭代并执行以下命令
更新文章set num_comments=(select count(id)from comments where id=$id)where id=$id
为了进一步增强它,在第一个选择中不要选择所有的值,特别是当该表太大时,您需要迭代文章,每次迭代获得1000条记录。这样,您就可以从数据库池中维护一个健康的数据库线程,并且还可以节省带宽。