用于跟踪用户收藏的系统

时间:2010-09-15 22:11:05

标签: php system favorites

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

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

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

你的想法是什么?

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

谢谢!

5 个答案:

答案 0 :(得分:11)

这是一种多对多的关系。用户可以喜欢许多电影,并且许多用户可以喜欢电影。在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请求。这意味着您需要使用<form>元素来提交POST请求,而不是<a href="...">元素。

答案 1 :(得分: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)
)

这称为交集表连接表,因为它将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]

答案 2 :(得分:1)

您需要创建一个新表:

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

然后当用户点击“添加收藏夹”按钮时,您只需在user_favorite_movies中插入一个新行,其中包含用户表中的用户ID,电影表中的电影ID以及添加的日期(适合排序)更高版本)。

希望这有帮助!

最佳,

-Eric

答案 3 :(得分:1)

您可以创建一个包含三列favouritesidmid的表uid。添加收藏夹:

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

搜索一个用户的收藏夹:

SELECT * FROM favourites WHERE uid = 7

搜索喜欢一部电影的人:

SELECT * FROM favourites WHERE mid = 9

答案 4 :(得分:0)

据我所知,您仍然需要使用JavaScript或Ajax来发布帖子,除非您想在每次标记/取消标记收藏时刷新页面,还要添加/删除新收藏指标同时到位。

或者我错过了什么?