2011-10-24 3 views
1

여러 카테고리에 기사를 추가해야합니다. 예를 들어 기사 이름이 '카테고리 1'과 카테고리 2에 추가해야합니다. 다중 카테고리에 하나의 기사

에 대한 테이블 간의 관계를 만드는 방법을 알아야합니다.

참고 : 과거에 나는 기사 데이터베이스 테이블 이름 '카테고리'에서 행을하고 1,2,3 같은 카테고리 ID를 추가하지만, 검색 및 목록이 메이크업 문제는 당신은 많은이 그

답변

6

당신은 세 개의 테이블이 필요합니다

  • 한 테이블 categories
  • 하나의 테이블 카테고리에 기사를 연결하기위한 테이블
  • articles를 들어, 우리는 categories_per_article를 호출 할 수 있습니다. 이 표는 종종 Junction table or a Association table이라고합니다.

예 데이터 : 우리는 many-to-many relationship (또는 n-이 전화 당신은 그 제 1 조 (퍼즈)을 볼 수

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 

세 가지 범주를 가지고 있으며, 문서 2 (BIZZ)는 단지 카테고리 1.있다 -n, 예를 들어 ER 또는 UML). 기사 1에는 여러 범주가 있고 카테고리 1은 여러 기사에 사용됩니다.

이 스키마를 사용하여 가능한 모든 쿼리를 수행 할 수 있습니다. 특정 예제 (예 : How do I get all articles which have categories 1 and 3 but not 2)에 대한 의견을 언제든지 물어보십시오.

0

에 대해 저를 도와주세요 여기에 일대일 관계 : 기사는 여러 범주를 가질 수 있으며 범주에는 분명히 여러 기사가 포함될 수 있습니다. 엔티티 간의 연관 관계를 명시 적으로 저장하는 하나 이상의 테이블이 없으면이를 올바르게 표현할 수 없습니다.

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 
관련 문제