2010-03-26 52 views

回答

1

您需要LIKE流派:

$query = "SELECT * FROM movielist WHERE genre LIKE '%comedy%' ORDER BY dateadded DESC" 
1
$query = "SELECT * FROM movielist WHERE genre LIKE '%comedy%' ORDER BY dateadded DESC"; 

OR

$query = "SELECT * FROM movielist WHERE FIND_IN_SET('comedy', genre) ORDER BY dateadded DESC"; 

第二個在大多數情況下更好

更好的是,您應該使用單獨的表來促進多對多的關係。

即,具有兩個字段(movie_id和genre_id(均爲索引外鍵))的新表稱爲'movies_genres'。每次將新的流派添加到電影或將新電影添加到流派時,請向此表添加條目。

要找到屬於特定類型的所有電影:

SELECT movies.* 
FROM movies 
    JOIN movies_genres 
     ON movies_genres.movie_id = movies.id 
    JOIN genres 
     ON movies_genres.genre_id = genres.id 
WHERE genres.name = 'comedy' 

要找到屬於特定電影所有類型:

SELECT genres.* 
FROM genres 
    JOIN movies_genres 
     ON movies_genres.genre_id = genres.id 
    JOIN topics 
     ON movies_genres.movie_id = movies.id 
WHERE movies.name = 'Citizen Kane' 
0

對於立即解決,做一個德克斯特建議。但是,從長遠來看,你會得到很多的好處從normalizing your database

1

有了您的模式,你可能會感興趣的find_in_set()

SELECT 
    x,y,z 
FROM 
    movielist 
WHERE 
    find_in_list('comedy', genre) 

請記住,這不是index-friendly和潛在的慢。


隨着normalized tables你不會有genre='comedy, action, drama'(一個領域內,即結構化的數據),但表

genres (
    id int auto_increment, 
    genre_name varchar(...) 
    ... 
) 

movielist (
    id int auto_increment, 
    title varchar(...) 
    ... 
) 

和一張桌子

moviegenres (
    movieid int, 
    genreid int, 
    ... 
) 

以及使用一個或兩個JOINs將存儲在這三個表中的信息「粘合」在一起的查詢。