2012-12-07 109 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

相關問題