mysql - 如何按流派或类别组织我的页面?我应该使用 mysql 数据库吗?

标签 mysql database organization

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

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

我真的很想知道我是否应该使用 mySQL 数据库,或者是否有另一种方法来过滤内容。对于这个问题的幼稚,我深表歉意,但我到处都看过,却不知道自己在做什么!!

最佳答案

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

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

流派表: ID_流派,名称。

分类表: ID_类别,名称。

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

movies_genre 表: ID_movies, ID_genre

movies_category 表: 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 FIDDLE DEMO

回应以下评论。如果您只想拥有年份,则可以将 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 毫克 ON mg.id_movie = m.id_movie) 加入流派 AS g ON g.id_genre = mg.ID_genre 其中 m.id_movie = 2;

关于mysql - 如何按流派或类别组织我的页面?我应该使用 mysql 数据库吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14677803/

相关文章:

MySQL显示两个表中的列而不重复

java.sql.SQLException 参数索引超出范围(1 > 参数个数,即 0)

MySQL:触发错误:#1193 - 未知的系统变量 'PurchasePrice'

database - 现有表未链接到 Azure 移动应用服务

database - 关系数据库的模板匹配

sql - 许多小型 SQL 调用或少量大型 SQL 调用?

c++ - 如何处理 CMake 中的子目录依赖关系?

angularjs - angular.js - 定义实用程序库的最佳实践

inheritance - 我如何组织这段从嵌入式类型重新定义方法的 Go 代码,以减少冗余并提高可维护性?

mysql - 重命名 100GB 表