MySQL 选择流派

问题描述 投票:0回答:2

我有一个数据库:

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, War
  1. 我如何从所有数据库的

    genres
    中选择独特的流派。 我需要下一个:动作/冒险/剧情/家庭/奇幻/历史/情节剧/惊悚/战争

  2. 如何观看特定类型的电影?

    选择

    movie_name
    movies
    哪里
    genre
    喜欢??

但他不仅能带来戏剧,还能带来情节剧。

  1. 如何搜索特定类型? 可能是:

    选择

    movie_name
    来自
    movies
    movie_name
    喜欢
    %stone%
    和`流派喜欢“戏剧”。

mysql select search sql-like
2个回答
4
投票

不要在数据库列中存储以逗号分隔的属性列表。

相反,有 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

那么你的问题就会变得非常非常简单。


2
投票

您在这里面临的问题是实现 N 到 N 关系要求。

由于电影之间的关系是多对多关系,因此将其存储在数据库模式中的正确方法是在单独的表中维护该关系。

为了练习,我们将此表称为“Movie_Genre_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

希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.