我需要的文章添加到多個類別 ,比如我有文章的名字「試驗品」需要將它添加到第1類和類別2 需要知道如何讓表之間的關係這個一文在多個類別
注:過去我做的文章數據庫表名「類別」行並添加類別ID喜歡1,2,3但在搜索和列表本作的問題,請幫我有關
我需要的文章添加到多個類別 ,比如我有文章的名字「試驗品」需要將它添加到第1類和類別2 需要知道如何讓表之間的關係這個一文在多個類別
注:過去我做的文章數據庫表名「類別」行並添加類別ID喜歡1,2,3但在搜索和列表本作的問題,請幫我有關
您需要三個表:
articles
categories
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
你會看到,第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
)。
你有很多一對多的關係在這裏:文章可以有多個類別,而類別顯然可以有多個文章。如果沒有至少一個明確存儲實體間關聯的表,則無法正確表示。
文章與類別之間的鏈接是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