Система для отслеживания избранных пользователей

На моем веб-сайте у меня есть столовые movies и users таблицы

Я пытаюсь создать кнопку «Добавить в favs», которую пользователь может щелкнуть, что добавит этот фильм в избранное (ajax / javascript не нужен в данный момент, просто php).

Так что же самый простой способ сделать что-то подобное? Я подумал об этом, но я не могу найти решение (все, что я считаю слишком сложным, и, на мой взгляд, невозможно).

Что вы думаете?

Мне не нужен готовый скрипт, просто идея, которая может заставить меня работать (хотя, если у вас есть пример такого скрипта, я был бы рад посмотреть на него).

Благодаря!

Related of "Система для отслеживания избранных пользователей"

Добавить третью таблицу:

 CREATE TABLE user_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) ) 

Это называется таблицей пересечений или таблицей соединений , поскольку она соединяет строки в таблице users с строками в таблице movies (как видите, каждый столбец является внешним ключом). Он также определяет отношения « многие-ко-многим» , потому что одному пользователю может нравиться много фильмов, и один фильм может понравиться многим пользователям.

Когда вы добавляете любимый фильм для пользователя, все, что вам нужно сделать, это вставить строку в эту таблицу с идентификатором пользователя и идентификатором фильма:

 INSERT INTO user_favorites(user_id, movie_id) VALUES([user ID], [movie ID]) 

Чтобы узнать, какие фильмы понравились пользователю:

 SELECT movie_id FROM user_favorites WHERE user_id = [user ID] 

Это отношения «многие ко многим». Пользователь может любить много фильмов, и многим пользователям может понравиться фильм. В СУБД вы представляете отношения «многие ко многим» с третьей таблицей. Я называю это таблицей пересечений, но она также называется другими именами.

Создайте таблицу с двумя столбцами. Столбцы представляют собой как внешние ключи, так и ссылки на фильмы и пользователей соответственно.

 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="..."> .

Вам нужно будет создать новую таблицу:

 user_favorite_movies -------------------- ID (primary key) userID (foreign key) movieID (foreign key) date 

Затем, когда пользователь нажимает кнопку «Добавить избранный», вы просто вставляете новую строку в user_favorite_movies с идентификатором пользователя из таблицы пользователя, идентификатором фильма из таблицы фильмов и датой его добавления (полезно для сортировки позже).

Надеюсь это поможет!

Лучший,

-Эрик

Вы можете создать favourites таблицы с тремя столбцами, id , mid и uid . Чтобы добавить избранное:

 INSERT INTO favourites (mid, uid) VALUES (3, 5) 

Для поиска фаворитов одного пользователя:

 SELECT * FROM favourites WHERE uid = 7 

Поиск людей, которые любили один фильм:

 SELECT * FROM favourites WHERE mid = 9 

Насколько я вижу, вам все равно придется использовать JavaScript или Ajax для публикации, если вы не хотите обновлять страницу каждый раз, когда отметьте / отмените выбор фаворита, а также добавьте / удалите новый любимый индикатор на месте в то же время.

Или я чего-то не хватает?