ユーザーが投稿を表示した回数のデータを収集するために使用する 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;