2011-10-24 9 views
1

の一品、私は記事名「テスト記事」を持っているカテゴリ1に追加する必要があり、カテゴリ2 この私は例えば、複数のカテゴリ に記事を追加する必要があり、複数のカテゴリ

のためのテーブルへの関係を作る方法を知っておく必要があります

注記:過去に私が記事データベースのテーブル名「カテゴリ」内の行を作成して、1,2,3のようにカテゴリIDを追加しますが、検索して、リスト内のこのメイク問題はあなたが多くを持っている

答えて

6

あなたは3つのテーブルが必要です

  • 一つのテーブルcategories
  • 一つのテーブルカテゴリに記事をリンクするためのテーブル
  • 一つarticlesのために、我々はそれcategories_per_articleを呼ぶかもしれません。このテーブルは、しばしばJunction table or a Association tableと呼ばれます。

例データ:

ARTICLES 
ID | Name | Description 
1 | Fuzz | A fuzzy three 
2 | Bizz | A five that means bizznezz 

CATEGORIES 
ID | Name 
1 | Prime numbers 
2 | Multiples of five 
3 | Smaller than four 

CATEGORIES_PER_ARTICLE 
ID | ARTICLE_ID | CATEGORY_ID 
1 | 1   | 1 
2 | 1   | 2 
3 | 1   | 3 
4 | 2   | 1 

あなたは私たちがmany-to-many relationship(またはnにこれを呼んでその記事1(ファズ)は三つのカテゴリーがあり、第2条(Bizz)が唯一のカテゴリ1を持って表示されます記事1に複数のカテゴリがあり、カテゴリ1が複数の記事で使用されているため、ERやUMLなどの-n)

このスキーマを使用してすべてのクエリを実行できます。具体的な例については、How do I get all articles which have categories 1 and 3 but not 2のようにコメントしてください。

0

について私を助けてください多対多の関係:記事は複数のカテゴリを持つことができ、カテゴリは明らかに複数の記事を持つことができます。これは、エンティティ間の関連付けを明示的に格納するテーブルが少なくとも1つもないと正しく表現できません。

1

記事とカテゴリのリンクはn対nの関係です。
記事は複数のカテゴリに属する​​ことができ、カテゴリは複数の記事に関連付けることができます。

SQLはn対n関係を直接サポートしていないため、リンクテーブルが必要です。

Table article_cats 
------------------ 
cat_id integer, 
article_id integer, 
primary key (cat_id, article_id) 

あなたはそのようにのような記事をリンク:

SELECT a.name, GROUP_CONCAT(c.name) as cats 
FROM articles a 
LEFT JOIN article_cats ac ON (a.id = ac.article_id) 
LEFT JOIN cats c ON (c.id = ac.cat_id) 
GROUP BY a.id 
関連する問題