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
posted @ 2021-01-12 13:23  Wenhsing  阅读(624)  评论(0编辑  收藏  举报