2011-12-16 40 views
0

我有3個表格:項目,類別projects_categories如何使用JOIN並避免重複數據?

我想要得到的項目名稱,描述和類別,但可以有每個項目一個以上的類別,所以我現在用的是一個查詢了重複的內容:

SELECT projects.name, projects.description, categories.name 
FROM projects 
JOIN projects_categories ON projects.project_id = projects_categories.project_id 
JOIN categories ON projects_categories.category_id = categories.category_id 
WHERE projects.project_id = ? 

我得到這個:

++ name +++ ++ description ++ ++ name (category) ++ 
project1  bla bla bla   film 
project1  bla bla bla   music 

就像你看到的即時得到,而不是一個

回答

2

GROUP_CONCAT兩排是你正在尋找的標籤:

SELECT projects.name, 
     projects.description, 
     group_concat(categories.name SEPARATOR ' ') as category_name 
FROM projects 
JOIN projects_categories 
    ON projects.project_id = projects_categories.project_id 
JOIN categories 
    ON projects_categories.category_id = categories.category_id 
WHERE projects.project_id = ? 
group by projects.name, projects.description 
+0

太棒了!但讓我們說我想讓每個類別分開?有沒有'mysql的方式'或只是使用split()或類似的東西會更好? – Jonathan 2011-12-16 21:49:13

+0

@Jonathan - 假設任何項目都可以分配到n個類別,您幾乎需要在編程語言中使用相當於split()的方法。如果限制項目可以屬於的類別數量,則可以將每個類別硬編碼到查詢中。 – 2011-12-16 21:51:40

1

您可以使用GROUP_CONCAT來組合類別並返回一行。

SELECT projects.name, projects.description, GROUP_CONCAT(categories.name) 
FROM projects 
JOIN projects_categories ON projects.project_id = projects_categories.project_id 
JOIN categories ON projects_categories.category_id = categories.category_id 
WHERE projects.project_id = ? 
GROUP BY projects.name, projects.description