1. 程式人生 > 實用技巧 >MySQL統計並更新主表字段

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