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

如何针对指定postId递增post表的commentsNumber字段?求最优方案

解决方案

一、可以实现指定postId的评论关联递增post表的commentsNumber字段

如果已经添加了commentsNumber字段,你可以在新增/删除评论时联动更新对应帖子的评论数字段:

1. 新增评论时递增字段

假设要给postId = 123的帖子新增评论,同步递增其commentsNumber:

-- 先插入评论(示例)
INSERT INTO comments (postId, content, createTime) VALUES (123, '新评论内容', NOW());
-- 再递增对应帖子的评论数
UPDATE post SET commentsNumber = commentsNumber + 1 WHERE id = 123;

2. 更新后获取最新评论数

如果用PostgreSQL这类支持RETURNING子句的数据库,可直接返回更新后的值:

UPDATE post SET commentsNumber = commentsNumber + 1 WHERE id = 123 RETURNING commentsNumber;

如果是MySQL这类不支持RETURNING的数据库,更新后单独查询即可:

SELECT commentsNumber FROM post WHERE id = 123;

注意:用这种方案必须保证所有修改评论的操作(删除、批量删除)都同步更新commentsNumber,否则会出现数据不一致。

二、无冗余字段的更优方案(推荐)

既然commentsNumber字段原本不存在,更推荐不存储这个冗余字段,通过实时查询统计评论数,从根源避免数据不一致问题,也无需维护额外字段:

1. 查询单篇帖子的评论数

用子查询直接统计对应帖子的评论量:

SELECT 
    p.*,
    (SELECT COUNT(*) FROM comments c WHERE c.postId = p.id) AS commentsNumber
FROM post p
WHERE p.id = 123;

2. 查询多篇帖子时附带评论数

用LEFT JOIN结合GROUP BY实现,减少重复计算:

SELECT 
    p.*,
    COUNT(c.id) AS commentsNumber
FROM post p
LEFT JOIN comments c ON p.id = c.postId
GROUP BY p.id
ORDER BY p.createTime DESC;

优缺点对比:

  • 实时统计:数据100%准确,无需维护字段,适合中小流量场景;若帖子和评论量极大,给comments.postId建立索引即可提升统计速度。
  • 冗余字段:统计速度略快,但需维护所有评论操作的同步更新,易出现数据偏差,仅适合超大规模且对查询性能要求极高的场景。

内容的提问来源于stack exchange,提问作者s4lvious

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:25:19