2

私は 2 つのテーブルを持っています。1 つは大量のデータ行を保持するテーブルで、もう 1 つはユーザーがこれまでに使用した行を保持するテーブルです。メイン テーブルから 3 つの項目を取得できるが、特定のユーザーが以前に見たことのない行のみを取得できる単一のクエリを使用するにはどうすればよいですか。

テーブルの例は次のとおりです。

CREATE TABLE `main_index` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

insert into `main_index` set `id`='1', `name`='something1';
insert into `main_index` set `id`='2', `name`='something2';
insert into `main_index` set `id`='3', `name`='something3';
insert into `main_index` set `id`='4', `name`='something4';
insert into `main_index` set `id`='5', `name`='something5';

CREATE TABLE `seen_index` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(12),
  `row_id` int(12),
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

insert into `seen_index` set `user_id`='1', `row_id`='3';
insert into `seen_index` set `user_id`='1', `row_id`='5';
insert into `seen_index` set `user_id`='2', `row_id`='1';
insert into `seen_index` set `user_id`='2', `row_id`='3';
insert into `seen_index` set `user_id`='2', `row_id`='4';

これに「1」の user_id を使用すると、クエリは 1、2、4 を返す必要があります。

4

1 に答える 1