ГРУППОВОЕ ОБЪЕДИНЕНИЕ в инструкции SELECT


У меня небольшая проблема с инструкцией SQL с 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 таблицы:

Элементы информационного бюллетеня, содержащие следующие столбцы:

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

И получатели информационных бюллетеней_item_, в которых есть следующие столбцы:

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

Группы рассылки информационных бюллетеней

mailgroup_id (int)
mailgroup_name (varchar)

Поля информационного бюллетеня

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

Информационные Бюллетени_item_receivers.letter_id относится к информационным бюллетеням_items.letter_id и информационным бюллетеням_item_receivers.значение относится к информационным бюллетеням_майлгрупп.mailgroup_id

Есть ли кто-нибудь, кто может увидеть, что я сделал не так?

Author: Morten Hagh, 2011-12-15

1 answers

Попробуйте это:-

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

И

group_concat( DISTINCT nm.mailgroup_name 
              ORDER BY nm.mailgroup_name)
 2
Author: ajreal, 2011-12-15 13:44:03