Template repository for Filmorate project.
- Информация о фильмах
- Информация о рейтингах фильмов
- Соединительная таблица для фильмов и их жанров
- Информация о жанрах фильмов
- Информация о пользователях приложения
- Соединительная таблица для фильмов и пользователях оценивших фильм
- Соединительная таблица для пользователей и их друзей (других пользователей)
- Информация о статусе запроса "дружбы" между пользователями
SELECT u.*
FROM User AS u
WHERE u.id = {userId};INSERT INTO friendship (user_id, friend_id, status_id)
SELECT {userId}, {friend_id}, s.name FROM status AS s
WHERE s.name = 'not acepted';DELETE FROM friendship
WHERE user_id = {userId} AND friend_id = {friend_id};SELECT u2.*
FROM User AS u1
JOIN friendship AS f ON u1.id = f.user_id
JOIN User AS u2 ON f.friend_id = u2.id
JOIN Status AS s ON f.status_id = s.status_id
WHERE u1.id = {userId} AND s.status = 'accepted';SELECT u2.*
FROM User AS u1
JOIN friendship AS f ON u1.id = f.user_id
JOIN User AS u2 ON f.friend_id = u2.id
JOIN Status AS s ON f.status_id = s.status_id
WHERE u1.id = {userId}
AND s.status = 'accepted'
AND u2.id IN (SELECT ou2.id
FROM User AS ou1
JOIN friendship AS of ON ou1.id = of.user_id
JOIN User AS ou2 ON of.friend_id = ou2.id
JOIN Status AS os ON of.status_id = os.status_id
WHERE ou1.id = {otherId}
AND os.status = 'accepted');SELECT * FROM UserINSERT INTO User (email, login, name, birthday)
VALUE ({user.getEmail()}, {user.getLogin()}, {user.getName()}, {user.getBirthday()});UPDATE User
SET email = {user.getEmail()},
login = {user.getLogin()},
name = {user.getName()},
birthday = {user.getBirthday()}
WHERE id = {user.getId()}INSERT INTO Film_User (film_id, user_id)
VALUE ({filmId}, {userId});DELETE FROM Film_User
WHERE film_id = {filmId} AND user_id = {userId};SELECT f.id,
f.name AS title,
f.description,
f.releaseDate,
f.duration,
r.name AS AMP_Rating,
liked_films.likes
FROM Film AS f
JOIN mpa_rating AS r ON f.rating_id = r.rating_id
LEFT JOIN (
SELECT fu.film_id AS liked_film_id,
COUNT(fu.user_id) AS likes
FROM Film_User AS fu
GROUP BY fu.film_id
) AS liked_films ON f.id = liked_films.liked_film_id
ORDER BY liked_films.likes DESC
LIMIT {count};SELECT f.id,
f.name AS title,
f.description,
f.releaseDate,
f.duration,
r.name AS AMP_Rating
FROM Film AS f
LEFT JOIN mpa_rating AS r ON f.rating_id = r.rating_id;INSERT INTO Film (name,
description,
releaseDate,
duration,
rating)
VALUE ({film.getName()},
{film.getDescription()},
{film.getReleaseDate()},
{film.getDuration()},
{film.getRating()});UPDATE Film
SET name = {film.getName()},
description = {film.getDescription()},
releaseDate = {film.getReleaseDate()},
duration = {film.getDuration()},
rating = {film.getRating()},
WHERE id = {film.getId()};INSERT INTO film_genres (film_id, genre_id)
VALUE ({filmId}, {genreId});INSERT INTO film_genres (film_id, genre_id)
SELECT {filmId}, g.genre_id
FROM Genre AS g
WHERE g.name = {genre};SELECT u.name AS full_name
FROM Film AS f
JOIN Film_User AS fu ON f.id = fu.film_id;
JOIN User AS u ON fu.user_id = u.id;
WHERE f.id = {filmId};SELECT f.name,
COUNT(fu.user_id) AS likes
FROM Film AS f
JOIN Film_User AS fu ON f.id = fu.film_id
WHERE f.id = {filmId}
GROUP BY f.name;SELECT f.name
FROM User AS u
JOIN Film_User AS fu ON u.id = fu.user_id
JOIN Film AS f ON fu.film_id = f.id
WHERE u.id = {userId};