如何根据wp_comments表行数更新wp_posts的comment_count列?
解决wp_posts表comment_count字段同步问题
嘿,我来帮你搞定这个评论数同步的事儿!你原来写的SQL语句有两处问题:一是重复关联了wp_posts表(应该关联wp_comments才对),二是统计评论数的逻辑完全不对。咱们直接上正确的解决方案:
方法一:仅更新有评论的文章
如果只需要给已有评论的文章更新评论数,用下面的语句就行:
UPDATE wp_posts p INNER JOIN ( -- 先统计每个文章ID对应的评论总数 SELECT comment_post_ID, COUNT(*) AS comment_count FROM wp_comments GROUP BY comment_post_ID ) c ON p.ID = c.comment_post_ID SET p.comment_count = c.comment_count;
这段代码的逻辑很清晰:先通过子查询把wp_comments里每个文章ID的评论数统计出来,再把这个统计结果和wp_posts表通过文章ID关联,最后把wp_posts的comment_count替换成统计好的数值。
方法二:同步所有文章(含无评论的)
要是想把那些没有评论的文章的comment_count也统一设为0,就用LEFT JOIN配合COALESCE函数:
UPDATE wp_posts p LEFT JOIN ( SELECT comment_post_ID, COUNT(*) AS comment_count FROM wp_comments GROUP BY comment_post_ID ) c ON p.ID = c.comment_post_ID -- COALESCE会把NULL(无评论的情况)替换成0 SET p.comment_count = COALESCE(c.comment_count, 0);
安全验证小技巧
执行更新前,建议先跑个SELECT语句验证一下结果是否符合预期,避免误操作:
SELECT p.ID AS 文章ID, p.comment_count AS 更新前评论数, COALESCE(c.comment_count, 0) AS 更新后评论数 FROM wp_posts p LEFT JOIN ( SELECT comment_post_ID, COUNT(*) AS comment_count FROM wp_comments GROUP BY comment_post_ID ) c ON p.ID = c.comment_post_ID;
这样你就能提前看到每个文章更新前后的评论数,确认没问题再执行UPDATE语句就放心多啦!
内容的提问来源于stack exchange,提问作者user715564
相关产品推荐
相关产品推荐

