我有以下mysql查询,它按类别生成条目列表。但是,生成的一些条目是重复的(重复的entry_id - 因为它们出现在多个类别中)。怎样才能确保没有重复?我试图使用GROUP BY
和DISTINCT
的其他变体,但没有成功。谢谢。
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 :(得分: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
这将为每个条目创建一行,并使用逗号分隔的类别列表。