mysql的group_concat函數

首先說一下業務場景
在這裏插入圖片描述
用戶表:uid,name等等

user_role表在這裏插入圖片描述

role表
在這裏插入圖片描述
role_module表
在這裏插入圖片描述
module表
在這裏插入圖片描述
這就是通用的用戶——角色——權限系統
現在前端在頁面上上要展示如下
在這裏插入圖片描述
不說了上代碼,

	/**
	*query對象主要是分頁的,分頁採用的是MybatisPlus的分頁方法,版本2.x
	*
	/
	public ApiResult pageList(String token,Query query) throws Exception{
		Page<User> page=new Page(query.getPageIndex(), query.getPageSize());
		page.setRecords(userMapper.select(page,query));
  		return ResultUtils.buildSucessObject(page);
}

後臺的sql

select g.*,h.* from (select e.*,f.module_id from
      (select c.*,d.name as role_name,d.role_type from
      (select a.uid,a.parent_uid,a.user_name,a.user_status,a.user_tel,a.user_email,a.deleted,a.nick_name,a.shop_id,a.user_headimg, b.role_id from
      (select * from qdz_user where shop_id = #{shopId} and deleted=0
      <if test="uid != null ">and uid = #{uid}</if>
      ) a left join qdz_user_role b on a.uid=b.user_id) c
      left join qdz_role d on c.role_id=d.id) e left join qdz_role_module f on e.role_id=f.role_id) g left join qdz_module h on g.module_id=h.id

mybatisPlus會自動在後面加上limit
結果
在這裏插入圖片描述在這裏插入圖片描述
圖片有點沒對齊,用戶和角色目前是一對一就沒放出來,角色和權限是一對多,得到的結果映射之後實際上在頁面只有一條數據,這是分頁就有點尷尬了,對此直接用了一下mysql的group_concat函數,結合groupby效果看一下


	select *,
      group_concat(i.name separator ';') as module_name from(
select g.*,h.* from (select e.*,f.module_id from
      (select c.*,d.name as role_name,d.role_type from
      (select a.uid,a.user_name,a.user_status,a.user_tel,a.user_email,a.shop_id, b.role_id from
      (select * from qdz_user where shop_id = '1557733645884912056'

      ) a left join qdz_user_role b on a.uid=b.user_id) c
      left join qdz_role d on c.role_id=d.id) e left join qdz_role_module f on e.role_id=f.role_id) g left join qdz_module h on g.module_id=h.id)
      i GROUP BY uid

效果
在這裏插入圖片描述現在就是這種效果,畢竟業務只需要展示就行,一個字符串懟過去。解決!

原創文章,轉載請註明出處!

發佈了44 篇原創文章 · 獲贊 13 · 訪問量 9690
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章