我在 Mysql 中有这张表,我用它来收集用户查看帖子的次数的数据。reader_id 是阅读帖子的用户的 id,read_pub_id 是发布/撰写帖子的人的 id,read_artc_id 是帖子的 id。
它的创建是这样的:
CREATE TABLE `reads_t` (
`reader_id` INT(10) NOT NULL DEFAULT '0',
`read_pub_id` INT(10) NOT NULL DEFAULT '0',
`read_artc_id` INT(10) NOT NULL DEFAULT '0',
PRIMARY KEY (`reader_id`, `read_pub_id`, `read_artc_id`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM;
然后,每次阅读帖子时我都会使用 Insert Ignore 语句,如下所示:
insert ignore into reads_t (reader_id, read_pub_id, read_artc_id) values (3,2,1);
所以我最终得到这样的数据:
reader_id; read_pub_id; read_artc_id
1; 1; 1
1; 1; 2
1; 1; 3
2; 1; 1
2; 1; 2
2; 1; 3
2; 2; 2
2; 2; 3
3; 1; 1
3; 2; 1
3; 2; 2
这里,用户 1 阅读了发布者 1 的文章 1 等等。
我如何执行 sql,以便最终得到如下数据:这是读者阅读出版商的帖子的总次数。稍后我将使用它来更新每个帖子的“阅读”列。
read_pub_id ; read_artc_id ; times_read
1 1 3
1 2 2
1 3 2
2 1 1
2 2 2
2 3 1
我可以看到这不能在我习惯的简单选择语句中完成。我尝试了下面的那个,但这给了我奇怪的结果。
select read_pub_id, read_artc_id, count(read_artc_id) as times_read from reads_t;