2

我有以下 mysql 查询,它按类别生成条目列表。但是,生成的某些条目是重复的(重复的 entry_id - 因为它们出现在多个类别中)。如何确保没有重复?我曾尝试使用 and 的其他变体GROUP BYDISTINCT但没有成功。谢谢你。

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
4

1 回答 1

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

这将为每个条目创建一行,并带有逗号分隔的类别列表。

于 2012-06-15T02:01:05.793 回答