Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2015, 20:29   #1
qvernaut
 
Регистрация: 13.11.2015
Сообщений: 4
Вопрос Помогите написать запрос

Имеется:
Таблицы films, genres, genres_films
films содержит id, title
genres содержит id, name
genres_films содержит film_id, genre_id

Нужно выбрать названия фильмов, по нескольким жанрам (чтобы каждый из которых содержал все указанные жанры, если хотя бы одного жанра у фильма нету, то его не должно быть в выдаче).
Получилось только что-то такое:
Код:
SELECT DISTINCT films.title FROM films , genres , genres_films WHERE films.id = genres_films.film_id 
AND genres_films.genre_id = genres.id AND genres.name = %s AND genres.name = %s
Проблема в том, что когда мы ищем запись по одному жанру, то все работает хорошо, но когда добавляем еще один, то
результата никакого нету

Последний раз редактировалось Stilet; 13.11.2015 в 20:54.
qvernaut вне форума Ответить с цитированием
Старый 13.11.2015, 21:05   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
SELECT films.title
  FROM genres,genres_films,films
  WHERE genres.name IN ('жанр1','жанр2') AND genres.id=genres_films.genre_id AND genres_films.film_id=films.id
  GROUP BY films.id,films.title
  HAVING COUNT(*)=2
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.11.2015, 22:40   #3
qvernaut
 
Регистрация: 13.11.2015
Сообщений: 4
По умолчанию

Огромное спасибо!
А если мы например к этому захотим добавить каналы? С ними все должно вести себя так же как и с жанрами. Как это может выглядеть все вместе?
kanal содержит id, name
kanal_films содержит film_id, kanal_id

Хотя такое скорее всего лучше сделать отдельным запросом, тем более, если к этому добавить время)

Последний раз редактировалось Stilet; 14.11.2015 в 10:12.
qvernaut вне форума Ответить с цитированием
Старый 13.11.2015, 23:04   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Попробуй каналы к фильмам так же, как жанры прицепить
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.11.2015, 16:12   #5
qvernaut
 
Регистрация: 13.11.2015
Сообщений: 4
По умолчанию

Еще возник вопрос по данной теме, а каким образом можно реализовать с NOT IN, чтобы выбрать все фильмы, у которых нету данных жанров?
Просто совместить предыдущее и это не получается, только если отдельными запросами.
qvernaut вне форума Ответить с цитированием
Старый 26.11.2015, 17:41   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
select ....
from films
where films.id not in ( select ganresfilms.film_id from ganresfilms, ganres 
                         where ganres.name in ('боевик', 'детектив') and ganresfilms.ganr_id =ganres.id
                          )
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 26.11.2015 в 17:45.
evg_m вне форума Ответить с цитированием
Старый 26.11.2015, 20:26   #7
qvernaut
 
Регистрация: 13.11.2015
Сообщений: 4
По умолчанию

Супер, большое спасибо!
qvernaut вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите написать SQL запрос Vitaliya_1619 Помощь студентам 1 23.09.2015 08:16
написать запрос, помогите Sadran SQL, базы данных 2 08.09.2015 12:49
Помогите,пожалуйста написать SQL-запрос!!! lola8669 SQL, базы данных 3 09.02.2009 19:30
Помогите написать запрос l_m_l SQL, базы данных 2 10.10.2008 20:09
Помогите написать SQL запрос Vedrus SQL, базы данных 1 22.07.2008 13:21