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="...">元素.
添加第三个表:
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)
| 归档时间: |
|
| 查看次数: |
6626 次 |
| 最近记录: |