存储过程中的for循环

For loop in stored procedure

我有三个表,角色,role_privillages 和模块:

roles

id name
1  Super admin
2  Sub admin
3  Viewer

role_privillages

id role_id  module_id
1   1       1
2   1       2
3   1       3
4   2       1
5   2       4
6   3       3
7   3       1

modules

id  name
1   Users management
2   Roles Management
3   Content Management
4   Texture Management

经过运行一个程序,我应该得到如下结果

id   name           assigned_modules
1    Super Admin    Users management, Roles management, Content Management
2    Sub Admin      Users management, Texture management
3    Viewer         Content Management, User Management

是否可以通过存储过程实现?这样的程序执行时间会不会太长?

像这样的东西应该可以工作,您可以根据需要在视图或过程中定义它:-

   select 
       r.id
     , r.name
     , group_concat(m.name) as assigned_modules
   from roles r 
   inner join role_privileges p on r.id = p.role_id
   inner join modules m on m.id = p.module_id
   group by r.id, r.name

所以,回答你的问题:

  • 是的,在存储过程中甚至在视图中都是可能的
  • 执行时间取决于许多因素(索引、数量 数据 etc.etc.)