Система отслеживания избранного пользователя - PullRequest
4 голосов
/ 16 сентября 2010

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

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

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

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

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

Спасибо!

Ответы [ 5 ]

11 голосов
/ 16 сентября 2010

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

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

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

6 голосов
/ 16 сентября 2010

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

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]
1 голос
/ 16 сентября 2010

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

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

Чтобы найти избранное одного пользователя:

SELECT * FROM favourites WHERE uid = 7

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

SELECT * FROM favourites WHERE mid = 9
1 голос
/ 16 сентября 2010

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

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

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

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

Best

-Эрик

0 голосов
/ 02 октября 2015

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

Или я что-то упустил?

...