我要创建一个网站,我想创建所有的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, '/', ','))"
问题可能看起来很复杂,但事实并非如此。
答案 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回答)。