2013-05-15 6 views
2

У меня есть 2 таблицы, одна из которых содержит много строк данных, и то, которое содержит строки, которые пользователь использовал на сегодняшний день. Как использовать один запрос, который позволяет мне вытащить 3 элемента из основной таблицы, но только строки, которые данный пользователь не видел раньше.Как запросить несколько таблиц MySQL на основе определенного условия?

Пример таблицы:

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'; 

Использование user_id '1' для этого, запрос должен возвращать: 1, 2, 4

+0

Я не вижу, как 'user_id = 1' совпадает с ожидаемым исходом' 1, 2, 4' –

+0

на основе 2-х таблиц, которые я дал, user_id (1) видел id 3 и 5 из таблицы main_index до, в соответствии с visible_index. Таким образом, запрос будет возвращать строки из main_index, которые user_id (1) еще не видел. –

ответ

4

Этот запрос будет работать:

SELECT 
* 
FROM 
main_index 
WHERE 
id NOT IN (
    SELECT row_id FROM seen_index WHERE user_id = 1 
) 

Вот fiddle

Альтернативный способ:

SELECT 
* 
FROM 
main_index 
WHERE 
NOT EXISTS (
    SELECT 1 FROM seen_index WHERE user_id = 1 AND row_id = main_index.id 
) 

Вот fiddle

+0

Никогда не слышал о SqlFiddle, спасибо! –

+0

Вот что мне нужно, спасибо Росс –

Смежные вопросы