GROUP_CONCAT合并多行查询结果

2018-03-06  本文已影响158人  youlei
resources

基于以上四张表,需要实现的是查询菜单信息列表的同时获取到该菜单分配给哪些角色,如下图:

效果

四张表中资源表和角色资源表作为中间表,联结菜单表和角色表

SELECT 
    m.*, 
    c.name AS 'role' 
FROM menus AS m 
JOIN resources AS a ON a.detail_id = m.id 
JOIN role_resources AS b ON b.resource_id = a.id 
JOIN roles AS c ON c.id = b.role_id
联表查询

联表后获取到了角色信息,还需要将相同id的行进行合并

SELECT 
    m.*, 
    GROUP_CONCAT(DISTINCT(c.name)) AS 'groups'
FROM menus AS m 
JOIN resources AS a ON a.detail_id = m.id 
JOIN role_resources AS b ON b.resource_id = a.id 
JOIN roles AS c ON c.id = b.role_id
GROUP BY id
LIMIT 0, 10
最终效果

总结:

  • GROUP_CONCAT函数的作用将相同组的数据进行合并
  • GROUP_CONCAT函数需要与group by配合使用
上一篇 下一篇

猜你喜欢

热点阅读