我有一个数据库:
id | movie_name | genres
1 | Die Hard | Action, Thriller
2 | Gladiator | Adventure, Action, Drama, History
3 | Harry Potter and the Sorcerers Stone | Fantasy, Adventure, Family
4 | Pearl Harbor | Action, Melodrama, War1)如何从所有数据库的genres中选择唯一的类型。我需要下一个:行动/冒险/戏剧/家庭/幻想/历史/情节剧/颤栗/战争
2)我怎样才能看一部特定类型的电影?
SELECT `movie_name` FROM `movies` WHERE `genre` LIKE ??但他不仅能带来戏剧,还能带来情节剧。
( 3)如何对某一特定类型进行搜索?可能是:
SELECT `movie_name` FROm `movies` WHERE `movie_name` LIKE `%stone%` AND `genres LIKE 'drama'.发布于 2011-03-24 18:45:19
不在数据库列中存储以逗号分隔的属性列表。
相反,有3张桌子:
Movies (id, movie_name)
id | movie_name
---+--------------------------------------
1 | Die Hard
2 | Gladiator
3 | Harry Potter and the Sorcerers Stone
4 | Pearl Harbor
Genres (id, genre_name)
id | genre_name
---+------------
1 | Action
2 | Thriller
3 | Adventure
4 | Drama
5 | History
6 | Fantasy
7 | Family
8 | Melodrama
9 | War
MovieGenre (movie, genre)
Movie | Genre
------+-------
1 | 1
1 | 2
2 | 1
2 | 3
2 | 4
2 | 5
3 | 3
3 | 6
3 | 7
4 | 1
4 | 8
4 | 9然后你的问题就变得简单多了。
发布于 2011-03-24 19:02:39
您在这里面临的问题是实现N到N关系要求。
由于电影之间的关系是多到多的关系,将其存储在数据库模式中的正确方法是在单独的表中维护关系。
为了这个练习,让我们把这个表称为"Movie_Genre_Relationship“。如果“死难”既是“动作与颤栗”电影,则应将其存储在relationship表中,如下所示:
Movie_Genre_Relationship
Movie_id | Genre_id
1 | 1
1 | 2假设有以下电影和体裁表:
Movies
Movie_id | Movie_Name
1 | Die Hard
Genres
Genre_id | Genre_Name
1 | Action
2 | Thriller然后,您可以通过以下操作搜索所有动作片:
select * from Movies m
inner join Movies_Genres_Relationship r on m.movie_id = r.movie_id
where r.genre_id = 1希望能帮上忙。
https://stackoverflow.com/questions/5423893
复制相似问题