在我的网站上,我有一张桌子movies
和一张桌子users
我正在尝试有一个用户可以单击的“添加到收藏夹”按钮,它将将该电影添加到他的收藏夹中(目前不需要 ajax / javascript,只需 php)。
那么我可以做这样的事情的最简单方法是什么?我已经考虑过这个问题,但我似乎找不到解决方案(我所想的太复杂了,在我看来不可能)。
你有什么想法?
我不需要现成的脚本,只需要一个可以让我工作的想法(尽管如果您有此类脚本的示例,我很乐意查看)。
谢谢!
这是一个多对多的关系。一个用户可以收藏很多部电影,一个电影可以被很多用户收藏。在 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="...">
元素。
添加第三个表:
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]
您将需要创建一个新表:
user_favorite_movies
--------------------
ID (primary key)
userID (foreign key)
movieID (foreign key)
date
然后,当用户单击“添加收藏夹”按钮时,您只需在 user_favorite_movies 中插入一个新行,其中包含用户表中的用户 ID、电影表中的电影 ID 以及添加日期(便于稍后排序)。
希望这可以帮助!
最好的,
-埃里克
您可以创建一个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 来发布帖子,除非您想在每次标记/取消标记收藏夹时刷新页面,以及添加/删除新的收藏夹指示器同时。
还是我错过了什么?