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 ステートメントでは実行できないことがわかります。以下のものを試しましたが、奇妙な結果が得られました。

select read_pub_id, read_artc_id, count(read_artc_id) as times_read from reads_t;
4

2 に答える 2

0

@fthhiellが示唆したように、あなたは非常に近かった:)、次のようなものを使用する必要があります。

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 に答える