2012-12-07 108 views
1

我想制作一个网站,我想创建所有DVD,我拥有。此外,我想将电影分类。我得到了这些表格。在这种情况下,我可以使用IN子句吗?

类别: ID - 标题

电影: ID - category_ref - 等等......

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

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

为移动的行会是这样:

ID:1 - category_ref:1/2(< - 这意味着动作/喜剧)

所以,在第一页 - 我想蜘蛛侠在“行动”和“喜剧”之下展示。

我想,我可以使用IN下得到正确类别的电影,但可根据需要它不工作:

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

的问题可能会出现复杂的,但它不是。

回答

2

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

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

,但如果你没有设计你的表以这种方式还没有使用第二个表来存储movie-category关系(见@Hugo_Delsing答案)。

+0

尽管使用另一个表结构更有优势,但我会保持以前的结构并使用FIND_IN_SET - 解决了我的问题。所以你值得接受的答案 - 谢谢! – hskrijelj

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) 
+0

我现在可以看到,我犯了一个错误,没有创建第三个将照片合并到类别的表格。这是实现它的明显方式。不过,我会继续建设并使用FIND_IN_SET。我永远不会忘记这种设计表结构的方式。谢谢,+1给你! – hskrijelj

相关问题