用于跟踪用户收藏的系统

Ale*_*ane 4 php favorites system

在我的网站上,我有一张桌子movies和一张桌子users

我正试图有一个"添加到收藏夹"按钮,用户可以点击,这将添加该电影到他的收藏夹(目前不需要ajax/javascript,只是php).

那么我最简单的方法是做什么呢?我已经考虑过了,但我似乎无法找到解决方案(我想到的一切都太复杂了,而且我认为不可能).

你有什么想法?

我不需要一个现成的脚本,只是一个可以让我工作的想法(虽然如果你有一个这样的脚本的例子,我会很高兴看到它).

谢谢!

Bil*_*win 12

这是一种多对多的关系.用户可以喜欢许多电影,并且许多用户可以喜欢电影.在RDBMS中,您表示与第三个表的多对多关系.我称之为交叉表,但它也有其他名称.

创建一个包含两列的表.这些列都是外键,分别引用电影和用户.

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)
); 
Run Code Online (Sandbox Code Playgroud)

当用户选择喜欢电影时:

INSERT INTO Favorites (user_id, movie_id) VALUES (?, ?)
Run Code Online (Sandbox Code Playgroud)

当用户决定他们不再喜欢电影时,删除相应的行:

DELETE FROM Favorites WHERE (user_id, movie_id) = (?, ?)
Run Code Online (Sandbox Code Playgroud)

要获得给定用户青睐的电影集:

SELECT movie_id FROM Favorites WHERE user_id = ?
Run Code Online (Sandbox Code Playgroud)

要获得喜欢给定电影的用户组:

SELECT user_id FROM Favorites WHERE movie_id = ?
Run Code Online (Sandbox Code Playgroud)

关于你的一条评论:

你不应该把"添加到收藏夹"链接.像谷歌这样的索引器会关注链接,然后在你知道它之前,每个用户都喜欢每部电影.

一般的最佳实践是只读操作可以是GET请求,而写入数据库的操作可以是POST请求.这意味着您需要使用<form>元素来提交POST请求,而不是<a href="...">元素.


Dan*_*uis 6

添加第三个表:

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)
)
Run Code Online (Sandbox Code Playgroud)

这称为交集表连接表,因为它将users表中的行连接到表中的行movies(如您所见,每列都是外键).它还定义了多对多关系,因为一个用户可以喜欢很多电影,一个电影可以被许多用户喜欢.

当您为用户添加喜爱的电影时,您所要做的就是在此表中插入一行,其中包含用户的ID和电影的ID:

INSERT INTO user_favorites(user_id, movie_id) VALUES([user ID], [movie ID])
Run Code Online (Sandbox Code Playgroud)

要查看用户最喜欢的电影:

SELECT movie_id FROM user_favorites WHERE user_id = [user ID]
Run Code Online (Sandbox Code Playgroud)