Конкат группы включает соответствующие данные - PullRequest
0 голосов
/ 10 апреля 2019

Это моя структура таблицы:

orders
--------------------------
id        | customer_name
--------------------------
23        | John Doe
24        | Jane Doe

order_comments
--------------------------------------------------------------------
id | order_id  | username | created_at  | comment
--------------------------------------------------------------------
1  | 23        | Bob      | 2019-04-01  | my first comment
2  | 23        | Jim      | 2019-04-03  | another comment
3  | 24        | Jim      | 2019-04-05  | testing
4  | 24        | Jim      | 2019-04-06  | testing again

Я хочу выбрать комментарии, объединенные символами новой строки, но также включить имя пользователя и made_at.Это то, что у меня есть:

select *
from (SELECT order_id, GROUP_CONCAT(`comment` order by id desc SEPARATOR '\n') as comments
      FROM `order_comments`
      group by order_id) comments

Результат:

order_id | comments
--------------------------------
23       | my first comment
         | another comment
--------------------------------
24       | testing
         | testing again

Вот мой желаемый результат, включающий имя пользователя и созданный для каждого комментария concat:

order_id | comments
--------------------------------
23       | Bob on 2019-04-01:
         | my first comment
         |
         | Jim on 2019-04-03:
         | another comment
---------------------------------
24       | Jim on 2019-04-05:
         | testing
         |
         | Jim on 2019-04-06:
         | testing again

Как получить желаемый результат?

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

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

select *
from (SELECT order_id, GROUP_CONCAT(
      DISTINCT CONCAT(username,’ on ‘, created_at, ‘:’, comment order by id desc SEPARATOR '\n') as comments
      FROM `order_comments`
      group by order_id) comments
0 голосов
/ 10 апреля 2019

GROUP_CONCAT или просто CONCAT:

SELECT order_id,CONCAT(username,' on ',created_at,' ',comments) 
FROM order_comments 
ORDER BY order_id;

Другой способ - CONCAT_WS> объединить с разделителем:

SELECT order_id,CONCAT_WS(' ',username,'on',created_at,comments) 
FROM order_comments 
ORDER BY order_id;
...