我对 mySQL DB 的概念非常陌生,不确定这是否是我组织网站内容所需要的。我正在建立一个拥有电影数据库的网站,我希望能够按类型、类别、年份等划分电影......其中一些电影有多种类型和类别,我不知道如何组织内容和标签。
我正在寻找的一个例子可能是这样的: http ://www.thelonelyisland.com/videos
我真的很想知道我是否应该使用 mySQL 数据库,或者是否有另一种过滤内容的方法。我为这个问题的天真道歉,但我到处看了看,不知道我在做什么!!
我对 mySQL DB 的概念非常陌生,不确定这是否是我组织网站内容所需要的。我正在建立一个拥有电影数据库的网站,我希望能够按类型、类别、年份等划分电影......其中一些电影有多种类型和类别,我不知道如何组织内容和标签。
我正在寻找的一个例子可能是这样的: http ://www.thelonelyisland.com/videos
我真的很想知道我是否应该使用 mySQL 数据库,或者是否有另一种过滤内容的方法。我为这个问题的天真道歉,但我到处看了看,不知道我在做什么!!
使用数据库肯定是最好的选择。这是一个基本布局:
从电影表开始: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);
回应以下评论。如果您只想拥有年份,则可以将 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;