1

我在 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;
4

2 回答 2

0

就像@fthiell 建议的那样,你非常接近:),你应该使用类似的东西:

select read_pub_id, read_artc_id, count(read_artc_id) as times_read
from reads_t
group by read_pub_id, read_artc_id;
于 2012-10-28T16:37:41.707 回答
0

您只需要添加 GROUP BY 子句,如下所示:

SELECT
  read_pub_id,
  read_artc_id,
  count(read_artc_id) as times_read
FROM
  reads_t
GROUP BY
  read_pub_id,
  read_artc_id;

:)

于 2012-10-28T17:02:52.230 回答