Php 用于跟踪用户收藏夹的系统

Php 用于跟踪用户收藏夹的系统,php,system,favorites,Php,System,Favorites,在我的网站上,我有一个表电影和一个表用户 我正在尝试一个用户可以点击的“添加到favs”按钮,它将把电影添加到他的收藏夹中(目前不需要ajax/javascript,只需要php) 那么,我做这种事情最简单的方法是什么?我已经考虑过这个问题,但我似乎找不到解决办法(我所想到的是太复杂了,在我看来是不可能的) 你的想法是什么 我不需要一个现成的脚本,只是一个可以让我工作的想法(尽管如果你有这样一个脚本的例子,我很乐意看看) 谢谢 您需要创建一个新表: user_favorite_movies --

在我的网站上,我有一个表
电影
和一个表
用户

我正在尝试一个用户可以点击的“添加到favs”按钮,它将把电影添加到他的收藏夹中(目前不需要ajax/javascript,只需要php)

那么,我做这种事情最简单的方法是什么?我已经考虑过这个问题,但我似乎找不到解决办法(我所想到的是太复杂了,在我看来是不可能的)

你的想法是什么

我不需要一个现成的脚本,只是一个可以让我工作的想法(尽管如果你有这样一个脚本的例子,我很乐意看看)


谢谢

您需要创建一个新表:

user_favorite_movies
--------------------
ID (primary key)
userID (foreign key)
movieID (foreign key)
date
然后,当用户单击“添加收藏夹”按钮时,您只需使用用户表中的用户ID、电影表中的电影ID以及添加日期(便于以后排序)将新行插入到用户最喜爱的电影中

希望这有帮助

最好的


-Eric

这是一种多对多关系。一个用户可以喜欢很多电影,而一部电影可以受到很多用户的青睐。在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)
); 
当用户选择喜爱电影时:

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 = ?

关于你的评论之一:

你不应该把“添加到收藏夹”链接。像谷歌这样的索引器会跟踪链接,然后在你知道之前,每个用户都喜欢每一部电影


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

您可以创建一个包含三列的表
收藏夹
mid
uid
。要添加收藏夹,请执行以下操作:

INSERT INTO favourites (mid, uid) VALUES (3, 5)
要搜索一个用户的收藏夹,请执行以下操作:

SELECT * FROM favourites WHERE uid = 7
要搜索喜欢一部电影的人,请执行以下操作:

SELECT * FROM favourites WHERE mid = 9
添加第三个表:

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
表中的行(如您所见,每列都是外键)。它还定义了多对多关系,因为一个用户可以喜欢多部电影,而一部电影可以被多个用户喜欢

当您为用户添加最喜爱的电影时,只需在此表中插入一行,其中包含用户ID和电影ID:

INSERT INTO user_favorites(user_id, movie_id) VALUES([user ID], [movie ID])
要查看用户喜欢的电影,请执行以下操作:

SELECT movie_id FROM user_favorites WHERE user_id = [user ID]

就我所知,你仍然需要使用JavaScript或Ajax来完成这篇文章,除非你想在每次标记/取消标记收藏夹时刷新页面,同时添加/删除新的收藏夹指示器


还是我遗漏了什么

“收藏夹”是指用户的书签吗?如果是这样的话,你可能必须使用Javascript。不,他指的是MySQL服务器上用户帐户上的用户到电影书签列表。好的,完美的答案,非常详细,我现在就试试这个!非常感谢Eric的回答,看起来像上面的答案,但仍然非常有用!谢谢大牛,正如我上面所说的,基本上是一样的,但我正在考虑,所以谢谢你!现在只是一个小问题,我将如何继续将其发布到数据库中,我不知道为什么,通常我可以这样做,但现在我的“添加到收藏夹”将是一个链接而不是表单按钮,那么调用SQL语句的最佳方式是什么?@Alex我不确定它是链接还是按钮有什么关系。在目标页面上,只需准备
INSERT
查询并执行它。我是不是错过了你要问的问题?谢谢德兰,如上所述,非常感谢!虽然答案也是一样的。