在这种情况下我可以使用IN子句吗?

时间:2012-12-07 12:42:06

标签: php mysql mysqli

我要创建一个网站,我想创建所有的DVD,我拥有。此外,我想将电影分类。我有这些桌子。

类: id - title

影: id - category_ref - etc ......

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

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

移动的行将是这样的:

ID:1 - category_ref:1/2(< - 表示动作/喜剧)

所以,在首页上 - 我希望蜘蛛侠能够在动作和喜剧中出现。

我想,我可以使用IN在正确的类别下拍摄电影,但它无法正常工作:

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

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

2 个答案:

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

答案 1 :(得分:2)

在这种情况下,您应该使用FIND_IN_SET功能:

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

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