Template repository for Filmorate project.
- users:
Содержит данные о пользователях. Таблица включает в себя следующие поля:
- Первичный ключ id - идентификатор пользователя;
- email - электронная почта пользователя;
- name - имя пользователя;
- login - логин пользователя;
- birthday - дата рождения пользователя
- films:
Содержит данные о фильмах. Таблица включает в себя следующие поля:
- Первичный ключ id - идентификатор фильма;
- Внешний ключ mpa_id (ссылает к таблице mpa) - идентификатор рейтинга;
- name - название фильма
- description - описание фильма
- release_data - дата релиза
- duration - продолжительность фильма
- friendship:
- Первичный ключ user_id (ссылается к таблице user) - идентификатор пользователя;
- Внешний ключ friend_id (ссылается к таблице user) - идентификатор друга(пользователя);
- Внешний ключ status_id (ссылается к таблице status_friendship)- идентификатор статуса
- status_friendship:
- Первичный ключ status_id - идентификатор статуса
- name - имя идентификатора
- genres:
- Первичный ключ id - идентификатор жанра
- name - название жанра
- mpa:
- Первичный ключ mpa_id - идентификатор рейтинга
- name - название рейтинга
- likes_films:
- Внешний ключ film_id (ссылается на таблицу films) - идентификатор фильма
- Внешний ключ user_id (ссылается на таблицу users) - идентификатор пользователя
- genres_films:
- Внешний ключ film_id (ссылается на таблицу films) - идентификатор фильма
- Внешний ключ genres_id (ссылается на таблицу genres) - идентификатор пользователя
- Получение фильма по идентификатору
SELECT* FROM FILMS
WHERE ID=?
- Получение популярных фильмов
SELECT f.*
FROM LIKES_FILMS lf
INNER JOIN FILMS f ON f.ID = lf.FILM_ID
GROUP BY f.ID
ORDER BY COUNT(lf.USER_ID) DESC
LIMIT ?;
- Получение пользователя по идентификатору
SELECT* FROM USERS
WHERE id = ?
- Получение списка друзей конкретного пользователя
SELECT u.*
FROM FRIENDSHIP f
INNER JOIN USERS u ON f.FRIENDS_ID = u.ID
WHERE f.USER_ID = ? AND f.STATUS_ID = 1;
- Получение списка общих друзей
SELECT u.*
FROM FRIENDSHIP f
INNER JOIN USERS u ON u.ID = f.FRIENDS_ID
WHERE F.USER_ID = ? OR F.USER_ID = ?
GROUP BY F.FRIENDS_ID
HAVING COUNT(F.FRIENDS_ID)>1;