在Web应用程序(基于laravel 5.3,mysql)中,有三个主要模型:User
,Department
和UserRole
以及许多其他模型(tickets
,{{1 }等等)tasks
有经理(顶层另一个User
)。
User
属于User
。部门组成层次结构。例如,用户有一些角色可以让他看到他所在部门以及他所在部门以下所有部门的任务。
例如,零级别部门的用户可以查看系统中的所有任务。
一级部门的用户可以看到他所在部门的任务,二级部门是他所在部门的直接子女,等等。可以有多个级别(最多10个)。
让我们说我想在部门B中显示用户的所有可见任务(见图)。我必须查询数据库以获取部门B中的任务,然后在部门D中,然后通过修改时间和分页来命令它们显示第一页。
这里的主要问题:在B部门有10万个任务,在D部门有20万个任务。这样的系统不能很好地扩展。
我担心以下问题:
要显示部门B中用户可见的所有任务,我将使用以下内容:select * from tasks in creator_id in(Department
)。我该如何避免此类疑问?
我有什么选择?
答案 0 :(得分:0)
给出每个部门编号,然后编写类似以下内容的查询:
来自部门1的用户示例:
memcpy
编辑:
select * from tasks
join department on department.id = task.department_id where department.number <= 1;