在获取sessionwise事件时使用groupconcat

0lvr5msh  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(444)

我必须从db获取每个会话的所有事件

id       Event       Session
1          A          Morning
2          B          Evening
3          C          Afternoon
4          D          Morning

如何得到类似的结果:

Result
Morning        Event1:A,Event2:D
Afternoon      Event1:C
Evening        Event1:B

任何帮助都将不胜感激
有没有可能得到json格式的结果?
例如
[{program:821, event:88, training:828, start:7凌晨15点,end:7凌晨50点,我nstructor:922, location:955,参与者编号:451,session:447, day:445,强度:••}]

xxslljrj

xxslljrj1#

基于斯凯西的回答。
但是这个查询将生成更像预期结果的结果。
查询

SET SESSION group_concat_max_len = @@max_allowed_packet

SELECT 
   `Session`
 , GROUP_CONCAT(CONCAT('Event', id, ':', `Event`) ORDER BY id ASC) AS `events`
FROM 
 Table1
GROUP BY
 `Session`

结果

|   Session |            events |
|-----------|-------------------|
| Afternoon |          Event3:C |
|   Evening |          Event2:B |
|   Morning | Event1:A,Event4:D |

请参见演示http://sqlfiddle.com/#!9/ce8086/9号
如果顺序很重要,你可以用 ORDER BY FIELD() 为了得到正确的顺序。
查询

SET SESSION group_concat_max_len = @@max_allowed_packet

SELECT 
   `Session`
 , GROUP_CONCAT(CONCAT('Event', id, ':', `Event`) ORDER BY id ASC) AS `events`
FROM 
 Table1
GROUP BY
 `Session`
ORDER BY FIELD(`Session`, 'Morning', 'Afternoon', 'Evening')

结果

|   Session |            events |
|-----------|-------------------|
|   Morning | Event1:A,Event4:D |
| Afternoon |          Event3:C |
|   Evening |          Event2:B |

请参见演示http://sqlfiddle.com/#!9/ce8086/12号

ss2ws0br

ss2ws0br2#

你应该使用分组方式

select session, group_concat(event)
  from my_table 
  group by Session

相关问题