MySQL统计并更新主表字段
假如有文章和评论两张表,表结构如下,现需要统计评论数并更新到文章的评论数字段上,可以参考本文,希望能够给你一些帮助。
文章表
CREATE TABLE `article` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '文章id',
`title` VARCHAR(255) NULL DEFAULT '' COMMENT '文章标题',
`detail` TEXT NULL COMMENT '内容',
`comments` INT(10) UNSIGNED NULL DEFAULT '0' COMMENT '评论数',
PRIMARY KEY (`id`)
)COMMENT='文章主表' COLLATE='utf8_general_ci' ENGINE=InnoDB AUTO_INCREMENT=1;
评论表
CREATE TABLE `comments` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '评论id',
`article_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '文章id',
`user_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '用户id',
`content` TEXT NULL COMMENT '评论内容',
PRIMARY KEY (`id`),
CONSTRAINT `FK_comments_article` FOREIGN KEY (`article_id`) REFERENCES `article` (`id`)
) COMMENT='评论表' COLLATE='utf8_general_ci' ENGINE=InnoDB ROW_FORMAT=DYNAMIC AUTO_INCREMENT=1;
数据自己随意添加即可
通过SQL语句查询出评论的数据,然后根据文章ID(article_id)进行分组
SELECT article_id, COUNT(*) FROM comments GROUP BY article_id
当我们要更新主表(文章主表)时,将上面的查询语句通过行链接组合起来,并通过外键将它们对应,最后使用SET语句设置即可
UPDATE article AS a
INNER JOIN (
SELECT
article_id,
COUNT(*) AS num
FROM comments
GROUP BY article_id
) AS c
ON a.id = c.article_id
SET
a.comments = c.num
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)