0

私は mySQL DB の概念に非常に慣れていないため、Web サイトのコンテンツを整理するためにこれが必要かどうかわかりません。私は映画のデータベースを持つサイトをまとめており、映画をジャンル、カテゴリ、年などで分類できるようにしたいと考えています...これらの映画の中には、複数のジャンルとカテゴリがあり、わかりませんコンテンツとタグを整理する方法。

私が探しているものの例は、次のようなものです: http://www.thelonelyisland.com/videos

mySQL データベースを使用することになっているのか、それともコンテンツをフィルタリングする別の方法があるのか​​ どうかを本当に知りたいです。素朴な質問で申し訳ありませんが、どこを見ても自分が何をしているのかわかりません!!

4

1 に答える 1

3

データベースを使用することは、間違いなく最善の方法です。これは基本的なレイアウトです:

映画テーブルから始めます: ID_movie、名前、年など。

ジャンルテーブル:ID_genre、名前。

カテゴリ テーブル: ID_category、名前。

映画は、ジャンル/カテゴリと多対多の関係にあります。そのため、映画とジャンル/カテゴリ間のブリッジ テーブルが必要になります。この表には、映画とジャンル/カテゴリの組み合わせが表示されます。

movie_genre テーブル: ID_movies、ID_genre

movie_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 フィドルのデモ

以下、ご指摘に対する回答です。年のみが必要な場合は、release_date を year に変更できます。1 つの方法は、それらを文字列値 (release_date DATETIME の代わりに Year VARCHAR(4)) に変換することです。さらに、ブリッジ テーブルに一意のインデックスを含めました。インデックスを使用すると、クエリ時間が短縮されます。

以下に、映画番号 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) g.id_genre = mg.ID_genre WHERE m.id_movie = 2; のようにジャンルを結合します。

于 2013-02-03T22:10:21.173 に答える