Это отношение многих ко многим. Пользователь может добавить в избранное много фильмов, а фильм может быть любимым многими пользователями. В РСУБД вы представляете отношение «многие ко многим» с третьей таблицей. Я называю это таблицей пересечений , но она называется и другими именами.
Создать таблицу с двумя столбцами. Столбцы являются как внешними ключами, так и ссылками на фильмы и пользователей соответственно.
CREATE TABLE Favorites (
user_id INT NOT NULL,
movie_id INT NOT NULL,
PRIMARY KEY (user_id, movie_id),
FOREIGN KEY (user_id) REFERENCES Users(user_id),
FOREIGN KEY (movie_id) REFERENCES Movies(movie_id)
);
Когда пользователь выбирает любимый фильм:
INSERT INTO Favorites (user_id, movie_id) VALUES (?, ?)
Когда пользователь решит, что ему больше не нравится фильм, удалите соответствующую строку:
DELETE FROM Favorites WHERE (user_id, movie_id) = (?, ?)
Чтобы получить набор фильмов, предпочитаемых данным пользователем:
SELECT movie_id FROM Favorites WHERE user_id = ?
Чтобы получить список пользователей, которые предпочитают данный фильм:
SELECT user_id FROM Favorites WHERE movie_id = ?
Относительно одного из ваших комментариев:
Вы не должны делать ссылку "Добавить в избранное". Индексаторы, такие как Google, будут переходить по ссылкам, а затем, прежде чем вы узнаете об этом, каждый пользователь выбрал любой фильм.
Общая рекомендация заключается в том, что операции только для чтения могут быть запросами GET, а операции записи в базу данных могут быть запросами POST. Это означает, что вам нужно использовать элемент <form>
для отправки запросов POST, а не элемент <a href="...">
.