2011-12-15 2 views
2

У меня небольшая проблема с оператором SQL с GROUP_CONCAT.GROUP_CONCAT в инструкции SELECT

У меня это заявление:

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) 

я получаю почти вывод, что я хочу, но мои mailgroups отображаются неправильно. Я хочу это будет отображаться как

группы А, группы 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

К сожалению, это дает мне тот же результат :( –

+0

Вы хотите nm.mailgroup_name или newsletter_item_receivers.value – ajreal

+0

Блин, что это сделал Спасибо миллион :) –

Смежные вопросы