Как составить select запрос чтобы найти общие теги фильмов и сериалов?
У меня есть 3 таблицы: Фильмы, Теги, Теги_Записи
create table movies (
id int unsigned not null auto_increment,
title varchar(255),
type int unsigned not null default 1,
primary key(id)
);
В таблице movies, поле type может иметь значения 0 для сериалов и 1 для фильмов.
create table tags (
id int unsigned not null auto_increment,
name varchar(255),
primary key(id)
);
create table tags_items (
tag_id int unsigned not null,
movie_id int unsigned not null
);
Подробнее: http://sqlfiddle.com/#!9/b5e3d2/6
Когда я хочу узнать, сколько тегов у меня к фильмам или сериалам я делаю запрос:
select ti.* from tags_items ti
join movies m on m.id = ti.movie_id
where m.type = 1
group by tag_id
Как мне можно сделать запрос, чтобы найти общие теги и для фильмов и для сериалов? Мои попытки сравнивать таблицу tags_items с самой собой не привели к успеху.
Ответы (1 шт):
Автор решения: Tiarait
→ Ссылка
Если я правильно понял то вам нужно выбрать tags где айдишники равны айдишникам из tags_items которые в свою очередь содержаться в фильмах и сериалах
Не совсем аккуратно но отображает описанное выше
SELECT DISTINCT t.* FROM tags_items ti, tags t
where t.id in(SELECT DISTINCT tag_id FROM tags_items
where tag_id in (
SELECT ti.tag_id FROM tags_items ti, movies m
where ti.movie_id = m.id and m.type = 1
)
and tag_id in (
SELECT ti.tag_id FROM tags_items ti, movies m
where ti.movie_id = m.id and m.type = 0
)
);