2012-06-15 40 views
2

我有以下的mysql查詢,它按分類生成條目列表。但是,生成的一些條目是重複的(重複的entry_id - 因爲它們出現在多個類別中)。如何確保沒有重複?我試圖使用GROUP BYDISTINCT的其他變體,但沒有成功。謝謝。Mysql獲得兩個左連接的唯一條目

SELECT ct.entry_id, ct.title, c.cat_name 
FROM exp2_categories c 
LEFT JOIN exp2_category_posts cp ON (cp.cat_id = c.cat_id) 
LEFT JOIN exp2_channel_titles ct ON (ct.entry_id = cp.entry_id) 
WHERE c.group_id = '4' 
GROUP BY c.cat_id 
ORDER BY ct.entry_date DESC 

編輯:

第一個答案是偉大的,但它產生的每個類別的多個條目。我需要每個類別一個獨特的條目。對不起,我應該在我原來的問題中更具體。

例如,它所產生 - 條目是獨一無二的,但也有太多的條目:

entry_id_1 Title 1 Category_1, Category_2 
entry_id_3 Title 3 Category_2 
entry_id_345 Title 345 Category_3 
entry_id_123 Title 123 Category_4, Category_3, Category_1 
entry_id_678 Title 678 Category_4 

期望的結果 - 條目是獨一無二的,每類只有一個條目:

entry_id_1 Title 1 Category_1 
entry_id_3 Title 3 Category_2 
entry_id_345 Title 345 Category_3 
entry_id_123 Title 123 Category_4 
+0

請郵寄表格的一個例子,從這個查詢中得到的結果示例 –

+0

當您使用group by ct.entry_id時會發生什麼... –

+0

當我使用group by ct.entry_id時,我會得到唯一的條目但重複的類別。 –

回答

1

你得到「重複」的原因是你也選擇了類別,所以如果一個條目在多個類別中,你會得到多個行。

什麼需要的是group_concat()聚合函數:

SELECT ct.entry_id, ct.title, group_concat(c.cat_name) as cat_names 
FROM exp2_categories c 
LEFT JOIN exp2_category_posts cp ON (cp.cat_id = c.cat_id) 
LEFT JOIN exp2_channel_titles ct ON (ct.entry_id = cp.entry_id) 
WHERE c.group_id = '4' 
GROUP BY ct.entry_id, ct.title 
ORDER BY ct.entry_date DESC 

這將創建一個行每個條目,用逗號分隔它在類別列表

+0

謝謝你的回答!這很好,除了每個類別產生多個條目 - 對不起,我應該在我的問題中更具體。我已經修改了我的問題。 –

+0

我可以幫助你,但我需要知道:你關心*有多個比賽時選擇哪個*類別?例如'entry_id_1,Title 1,Category_1,Category_2'你關心如果你有'Category_1'或'Category_2'嗎?如果你在乎,你想如何決定? – Bohemian

+0

我不關心爲每個條目選擇哪個類別,只要最終結果包含所有類別(每個條目都包含一個條目),而不重複類別或條目。我希望我有道理? –