1

我要建立一个网站,我想在其中制作我拥有的所有 DVD。此外,我想将电影分类。我得到了这些表。

类别: id - 标题

电影: id - category_ref - 等等......

想象一下,我创建了几个类别:(动作 - ID:1,喜剧 - ID:2)

当我在管理面板中创建电影时,我将有机会通过复选框选择更多类别。例如,我可以为蜘蛛侠选择动作和喜剧。

移动的行将如下所示:

ID:1 - category_ref:1/2(<- 意思是动作/喜剧)

所以,在首页上——我希望蜘蛛侠同时出现在动作和喜剧下。

我想,我可以使用 IN 来获取正确类别下的电影,但它不能按预期工作:

"SELECT id, movie_title FROM film WHERE $catID IN((REPLACE(category_ref, '/', ','))"

这个问题可能看起来很复杂,但事实并非如此。

4

2 回答 2

3

如果要为电影添加多个类别,则需要第三个表来存储它。

Categories: id, title
movies: id, title
movie_categories: movieID, categoryID

那么你可以有

//categories
1 Action
2 Comedy

//Movies
1 Spiderman

//movie_categories
1 1   //connection between movieID 1 and categoryID 1 (spiderman & action)
1 2   //connection between movieID 1 and categoryID 2 (spiderman & comedy)

然后你可以搜索

SELECT id, title FROM movies WHERE ID IN(SELECT movieID FROM movie_categories WHERE categoryID=$catID)
于 2012-12-07T12:46:44.073 回答
2

在这种情况下,您应该使用FIND_IN_SET函数:

WHERE FIND_IN_SET($catID,(REPLACE(category_ref, '/', ','))>0

但是,如果您还没有以这种方式设计表格,请使用第二个表格来存储movie-category关系(请参阅@Hugo_Delsing 答案)。

于 2012-12-07T12:53:11.633 回答