0

我对 mySQL DB 的概念非常陌生,不确定这是否是我组织网站内容所需要的。我正在建立一个拥有电影数据库的网站,我希望能够按类型、类别、年份等划分电影......其中一些电影有多种类型和类别,我不知道如何组织内容和标签。

我正在寻找的一个例子可能是这样的: http ://www.thelonelyisland.com/videos

我真的很想知道我是否应该使用 mySQL 数据库,或者是否有另一种过滤内容的方法。我为这个问题的天真道歉,但我到处看了看,不知道我在做什么!!

4

1 回答 1

3

使用数据库肯定是最好的选择。这是一个基本布局:

从电影表开始:ID_movie、名称、年份等。

流派表:ID_genre,名称。

类别表:ID_category,名称。

电影与流派/类别有多对多的关系。所以你需要一个电影和流派/类别之间的桥梁表。在此表中,您将拥有电影和流派/类别之间的组合。

movies_genre 表:ID_movies、ID_genre

电影类别表:ID_movies、ID_category

这是用于创建表结构和示例数据的 SQL 查询:

CREATE TABLE movie(
  id_movie INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50),
  release_date DATETIME
  );

CREATE TABLE genre(
  id_genre INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50)
  );

CREATE TABLE category(
  id_category INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50)
  );

CREATE TABLE movie_genre (
  ID_movie_genre INT AUTO_INCREMENT PRIMARY KEY,
  ID_movie INT,
  ID_genre INT,
  UNIQUE (ID_movie,ID_genre),
  INDEX (ID_movie,ID_genre)
  );


CREATE TABLE movie_category (
  ID_movie INT,
  ID_category INT
  );

INSERT INTO movie (name, release_date) VALUES 
('Transformers 3 Dark of the moon','2012-01-01'), 
('Harry potter and the deathly hallows 2','2011-01-01'), 
('Pirates of the caribbean. On stranger tides', '2012-01-01');

INSERT INTO genre (name) VALUES ('Action'), ('Fantasy'), ('Comedy');

INSERT INTO movie_genre(id_movie, id_genre) VALUES (1,1), (2,1),(2,2),(3,2),(3,1);

SQL 小提琴演示

回应以下评论。如果您只想拥有年份,则可以将 release_date 更改为年份。一种方法是将它们转换为字符串值(Year VARCHAR(4) 而不是 release_date DATETIME)。此外,我在桥表中包含唯一性和索引。索引将加快您的查询时间。

下面您将找到一个示例查询,该查询将从电影编号 2 中检索名称和流派。 SELECT m.name AS Movie, g.name AS Genre FROM (movie AS m left JOIN movie_genre AS mg ON mg.id_movie = m.id_movie)加入流派 AS g ON g.id_genre = mg.ID_genre WHERE m.id_movie = 2;

于 2013-02-03T22:10:21.173 回答