2011-10-24 80 views
1

我需要的文章添加到多個類別 ,比如我有文章的名字「試驗品」需要將它添加到第1類和類別2 需要知道如何讓表之間的關係這個一文在多個類別

注:過去我做的文章數據庫表名「類別」行並添加類別ID喜歡1,2,3但在搜索和列表本作的問題,請幫我有關

回答

6

您需要三個表:

示例數據:

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 

你會看到,第1條(起毛)有三大類,與第2條(BIZZ)只有1類我們稱之爲many-to-many relationship(或者n對-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