You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:24:23