我能想到的最好的方法是在流派和电影之间建立多对多的关系(这意味着一部电影可以有多种流派,一种流派可以出现在许多电影中)。
这涉及添加另外两个表,一个用于定义流派,另一个用于将它们与电影相关联:
genres
---------
id | name
这是稍微棘手的部分:
genres-movies
-------------------
movie_id | genre_id
wheremovie_id
是表中的实际 ID movies
,并且genre_id
是表中的实际 ID genres
。
例如,ID 为 1 的流派是Science Fiction
,ID 为 42 的电影是Hitchhiker's Guide to the Galaxy
(看看我在那里做了什么?),这意味着如果我在 有条目42 | 1
,genres-movies
则意味着银河系漫游指南是科幻小说。请注意,两者movie_id
都不genre_id
是唯一的,两者都可以出现多次,因此可能出现以下情况:
movie_id | genre_id
---------+---------
1 | 2
1 | 3
2 | 2
3 | 1
要查找电影的所有类型:
SELECT `genre_id` FROM `genres-movies` WHERE `movie_id` = <ID>;
毕竟背景,你的问题。使用这种方法,您需要多个查询,从电影中删除所有类型,然后每个都添加您选择的类型。您必须这样做,因为未选中的复选框不会发送到服务器(伪代码)
DELETE FROM `genres-movies` WHERE `movie_id` = <ID>; --Remove all genres
foreach ($genres_from_checkboxes as $genre) {
INSERT INTO `genres-movies` (`movie_id`, `genre_id`) VALUES (:movie_id, :genre_id)
}
笔记!始终使用来自用户的数据清理(或更好地准备!!! )查询!
呸!那很长,希望你学到一两件事:)