在web应用程序(基于laravel 5.3,mysql)中,有三个主要模型:User、Department和UserRole,以及许多其他模型(tickets、tasks等) User有管理器(顶层的另一个User )。
User属于Department。部门构成了层次结构。用户具有一些角色,例如,允许他查看其部门和其部门下的所有部门中的任务。
例如,零级部门的用户可以看到系统中的所有任务。
一级部门中的用户可以看到自己部门中的任务,二级部门中的用户可以看到其部门的直属下级等。可以有多个级别(最多10个)。
假设我想为部门B中的用户显示所有可见任务(见图)。我必须查询数据库以获取部门B中的任务,然后在部门D中,然后按修改时间排序并分页显示第一页。

这里的主要问题:在部门B中有100000个任务,在部门D中有200000个任务。这样的系统不能很好地扩展。
我害怕以下问题:
要显示部门B中的用户可见的所有任务,我将使用如下内容: select * from tasks where creator_id in (long list of user ids which can be queried for currently authenticated user, if this user in department b, than here will be list of user ids in departments B and C, task has no connection to department, only to user)。我如何避免这样的查询?
我有什么选择?
发布于 2017-01-19 21:33:18
给出每个部门的编号,然后编写类似如下的查询:
部门1的用户示例:
select * from tasks
join department on department.id = task.department_id where department.number <= 1;编辑:
select * from tasks
join users on users.id = tasks.user_id
join department on department.id = users.department_id where department.number <= 1;https://stackoverflow.com/questions/41737875
复制相似问题