2011-12-15 67 views
2

我有一个带有GROUP_CONCAT的SQL语句的小问题。SELECT语句中的GROUP_CONCAT

我有这样的说法:

SELECT ni.*, GROUP_CONCAT(newsletter_item_receivers.value) AS receivers, nf.*, GROUP_CONCAT(nm.mailgroup_name) AS mailgroups 
FROM newsletter_items ni 
INNER JOIN newsletter_fields nf ON (nf.field_letter_uid = ni.letter_id)               
LEFT JOIN newsletter_item_receivers ON (newsletter_item_receivers.letter_id = ni.letter_id) 
INNER JOIN newsletter_mailgroups nm ON (FIND_IN_SET(nm.mailgroup_id, newsletter_item_receivers.value)) 
WHERE nf.field_name = 'letter_headline' AND ni.template = '". $template ."' 
GROUP BY ni.letter_id 

我做错了什么,因为我的输出一团糟。

我有4个表:

newsletter_items具有这些列:

letter_id (int) 
letter_date (int) 
template (varchar) 
status (int) 

和newsletter_item_receivers 具有这些列:

rid (int) 
letter_id (int) 
value (int) 

newsletter_mailgroups

mailgroup_id (int) 
mailgroup_name (varchar) 

newsletter_fields

field_uid (int) 
field_name (varchar) 
field_content (text) 
field_letter_uid (int) 

我几乎得到我想要的输出,但我的邮件组会显示错误。我希望它可以显示像

A组,C组,但它显示像

A组,C组,A组,C组,C组 当我newsletter_item_receivers表包含此:

rid | letter_id | value 
1 | 1   | 2 
2 | 1   | 3 
3 | 2   | 1 

newsletter_item_receivers.letter_id指newsletter_items.letter_id和 newsletter_item_receivers.value指newsletter_mailgroups.mailgroup_id

有没有谁可以看到我做错了什么?

回答

2

试试这个: - ?!

group_concat(DISTINCT newsletter_item_receivers.value 
       ORDER BY newsletter_item_receivers.value) 

而且

group_concat(DISTINCT nm.mailgroup_name 
       ORDER BY nm.mailgroup_name) 
+0

不幸的给我同样的结果:( – 2011-12-15 13:41:39