Получение данных из нескольких таблиц с отношениями

#mysql

Вопрос:

У меня есть следующие таблицы:

введите описание изображения здесь

Я хочу выбрать для конкретных пользователей фильмы с названием и жанром.

Что я пытался:

 select title, name 
from movies 
left join genres on movies.id=genres.id 
left join users on movies.id=users.id;
 

И возвращает мне все фильмы всех пользователей

Комментарии:

1. Вы не указали конкретного пользователя, так почему бы ему не показывать все фильмы всех пользователей? Как он должен знать, какого конкретного пользователя вы хотите?

2. Добавьте WHERE users.username = ? и укажите имя пользователя в параметрах.

3. @Barmar я попытался добавить, ГДЕ users.username = «администратор» и вернуть 0 строк, когда он должен вернуть 2

4. Вам нужно использовать users_movies таблицу, чтобы найти взаимосвязь между пользователями и фильмами.

5. И вам нужно использовать movies_genres , чтобы найти жанры фильмов.

Ответ №1:

Вы не используете таблицы users_movies и movies_genres не находите взаимосвязи между пользователями, фильмами и жанрами.

 SELECT m.title, g.name
FROM movies AS m
JOIN movies_genres AS mg ON m.id = mg.movies_id
JOIN genres AS g ON g.id = mg.genres_id
JOIN users_movies AS um ON m.id = um.movies_id
JOIN users AS u ON u.id = um.users_id
WHERE u.username = 'admin'
 

Пример заполнения этих таблиц:

 INSERT INTO movies (title, year, description, image, runtime, rating)
VALUES ("Test", 1999, "All about a test", "", 120, 1);
SET @movie_id = LAST_INSERT_ID();

INSERT INTO genres (name) VALUES ('horror');
SET @genre_id = LAST_INSERT_ID();

INSERT INTO users (username, password) VALUES ("admin", "adminpw");
SET @user_id = LAST_INSERT_ID();

INSERT INTO movies_genres (movies_id, genres_id)
VALUES (@movie_id, @genre_id);

INSERT INTO users_movies (movies_id, users_id)
VALUES (@movie_id, @user_id);
 

Комментарии:

1. Он по-прежнему возвращает 0 строк

2. Можете ли вы опубликовать некоторые примеры данных и ожидаемый результат?

3. Опубликуйте это в виде обычного текста, а не скриншотов. Или сделайте sqlfiddle.

4. Вот фотографии с кодом, таблицами и результатом. Я удалил все содержимое таблиц и добавил в них новые данные, и он по-прежнему возвращает 0 строк

5. Я не могу скопировать/вставить фотографию.