Есть три таблицы:
films
filmsjanrs
janr
Т.е. фильмы и жанры. Как пример запроса, надо вывести все фильмы ужасы, но НЕ комедии.
Запрос
SELECT *
FROM `films`
left join `filmsjanrs`
left join `janr` on `filmsjanrs`.janrid = `janr`.id and `janr`.id <> 2
on `films`.id = `filmsjanrs`.filmid
WHERE `janr`.id = 1
Возвращает фильмы, которые относятся к жанру ужасы. Но среди них есть фильм, который одновременно относиться и к жанру комедии. Как правильно написать запрос?
Заранее большое спасибо =)
Структура таблиц:
CREATE TABLE IF NOT EXISTS `films` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(200) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=7 ;
--
-- Дамп данных таблицы `films`
--
INSERT INTO `films` (`id`, `name`) VALUES
(1, 'Самый лучший фильм'),
(2, 'Пила 2'),
(3, 'Пила 3'),
(4, '18 мгновений весны'),
(5, 'ФильмМистика'),
(6, 'Американский пирог');
-- --------------------------------------------------------
--
-- Структура таблицы `filmsjanrs`
--
CREATE TABLE IF NOT EXISTS `filmsjanrs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`filmid` int(11) NOT NULL,
`janrid` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ;
--
-- Дамп данных таблицы `filmsjanrs`
--
INSERT INTO `filmsjanrs` (`id`, `filmid`, `janrid`) VALUES
(1, 1, 2),
(2, 2, 1),
(3, 3, 1),
(4, 4, 3),
(5, 5, 4),
(6, 6, 2),
(7, 1, 1),
(8, 1, 6),
(9, 2, 8),
(10, 2, 6);
-- --------------------------------------------------------
--
-- Структура таблицы `janr`
--
CREATE TABLE IF NOT EXISTS `janr` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(200) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=16 ;
--
-- Дамп данных таблицы `janr`
--
INSERT INTO `janr` (`id`, `name`) VALUES
(1, 'Ужасы'),
(2, 'Комедия'),
(3, 'Мелодрама'),
(4, 'Мистика'),
(5, 'Детское кино'),
(6, 'Боевик'),
(7, 'Боевые исскуства'),
(8, 'Детектив'),
(9, 'Иторичексиий'),
(10, 'Фантастика'),
(11, 'Повседневность'),
(12, 'Приключения'),
(13, 'Психология'),
(14, 'Сверхестественное'),
(15, 'Фентези');