Несколько условий в запросе - MySQL (220471)
Формулировка задачи:
Имеется:
Таблицы 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
Решение задачи: «Несколько условий в запросе»
textual
Листинг программы
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 OR genres.name = %s) HAVING COUNT(1) = 2
Объяснение кода листинга программы
В представленном коде выполняется запрос к базе данных, который имеет следующую структуру:
- SELECT DISTINCT films.title - выбирается уникальное значение столбца films.title
- FROM films - указывается таблица, из которой производится выборка
- , genres , genres_films - используются запятые для объединения трех таблиц (films, genres, genres_films)
- WHERE films.id = genres_films.film_id - устанавливается связь между таблицами по полю film_id из таблицы genres_films и id из таблицы films
- AND genres_films.genre_id = genres.id - устанавливается связь между таблицами по полю genre_id из таблицы genres_films и id из таблицы genres
- AND (genres.name = %s OR genres.name = %s) - устанавливаются условия для выборки, где значения переменных %s и %s сравниваются со значением столбца genres.name
- HAVING COUNT(1) = 2 - применяется условие HAVING, которое проверяет, что количество записей, удовлетворяющих условиям в WHERE, равно 2 В итоге запрос выбирает уникальные названия фильмов из таблицы films, которые относятся к двум определенным жанрам.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д