美文网首页
GROUP_CONCAT合并多行查询结果

GROUP_CONCAT合并多行查询结果

作者: youlei | 来源:发表于2018-03-06 17:10 被阅读158次
    • 1 菜单表


      menus
    • 2 资源表(管理不同类型的资源)

    resources
    • 3 角色资源表


      role_resources
    • 4 角色表


      roles

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

    效果

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

    • 联表查询
    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配合使用

    相关文章

      网友评论

          本文标题:GROUP_CONCAT合并多行查询结果

          本文链接:https://www.haomeiwen.com/subject/micrfftx.html