#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. Я не могу скопировать/вставить фотографию.