Помогите пожалуйста MySQL GROUP_CONCAT и ORDER и объединяющиеся столбцы - PullRequest
1 голос
/ 09 февраля 2012

Я два дня тянул свои волосы, пытаясь соединить запрос MySQL, чтобы собрать некоторые данные.Однако это выше моего уровня опыта работы с SQL.

Следующий запрос извлекает данные, которые мне нужны, но мне нужно отформатировать их по-другому, чтобы я мог их использовать.

SELECT b.key, a.author, a.comment FROM action a, issue b 
WHERE a.issueid=b.id AND a.actiontype='comment';

Это производит вывод примерно так:

1 | joe | comment 3
3 | sally | comment 2
1 | sam | comment 2
2 | julie | comment 2
1 | bill | comment 1
3 | joe | comment 1
2 | sam | comment 1

b.key уникален и может содержать 0-∞ a.comment.Существует связь 1-1 с a.author и a.comment, и я должен поддерживать первоначальную связь.Вывод, кажется, в порядке возрастания, основанный на дате a.comment.

Я хотел бы получить данные в следующем формате (CSV), объединяя результаты a.author и a.comment водин столбец:

"1", "bill - comment 1", "sam - comment 2", "joe - comment 1"
"2", "julie - comment 1", "sam - comment 2"
"3", "joe - comment 1", "sally - comment 2"

Я поиграл с несколькими комбинациями GROUP_CONCAT и ORDER, а также немного запутался в подзапросах, основанных на этой записи , и не могу отформатироватьтак, как мне нужно.Кроме того, похоже, что порядок столбца комментариев меняется.Мне нужно сохранить исходный (от самого старого к новейшему) порядок, но мой исходный запрос, приведенный выше, дает результаты от самого нового до самого старого порядка.Если разделители представляют проблему, я, конечно, могу выполнить некоторую постобработку с поиском и заменой perl или awk для результатов.Любая помощь с благодарностью!

Ответы [ 2 ]

1 голос
/ 09 февраля 2012

Как насчет

SELECT
    issue.key,
    GROUP_CONCAT(CONCAT(action.author, ' - ', action.comment) ORDER BY action.created ASC SEPARATOR '|')
FROM action
INNER JOIN issue
    ON action.issueid = issue.id
WHERE action.actiontype = 'comment'
GROUP BY issue.key;

с некоторой последующей обработкой для разделения на основе символа канала.Если у вас возникают проблемы с усечением, вам может потребоваться увеличить значение group_concat_max_len.

0 голосов
/ 09 февраля 2012

Проверьте это. Объединение никак не влияет на способ отображения данных, поэтому я пишу запрос так, как будто ваша таблица на самом деле является той, которую вы отображаете в качестве вывода

select concat('"', id, '", ',
  group_concat(concat('"', author, ' - ', comment, '"') separator ", ")
) as result from table1
group by id

Заказ group_concat зависит от вас.

Вот пример .

Надеюсь, это поможет.

...