Php 从外键数可变的MySQL数据库获取行。

Php 从外键数可变的MySQL数据库获取行。,php,mysql,sql,database,Php,Mysql,Sql,Database,我的数据库的一个子集包含3个表 使用者 用户信息 任务 用户表的主列是: id{PK} “用户详细信息”表包含有关用户的信息(只有部分用户具有这些详细信息,学生)。因此,用户详细信息表的主要列为: 用户{PK,FK}主管{FK} supervisor\u id是用户表中的一个id。每个学生有一名导师 最后,还有任务表,其中只有学生创建任务,任务表的主要列为: 任务{PK}用户{FK} 我遇到的问题是,如果一个主管想看到他的所有学生的任务,那么就要得到一个适当的查询。我知道您可以在user\u d

我的数据库的一个子集包含3个表

使用者

用户信息

任务

用户表的主列是:

id{PK}

“用户详细信息”表包含有关用户的信息(只有部分用户具有这些详细信息,学生)。因此,用户详细信息表的主要列为:

用户{PK,FK}主管{FK}

supervisor\u id
是用户表中的一个id。每个学生有一名导师

最后,还有任务表,其中只有学生创建任务,任务表的主要列为:

任务{PK}用户{FK}

我遇到的问题是,如果一个主管想看到他的所有学生的任务,那么就要得到一个适当的查询。我知道您可以在
user\u details
表中查询所有具有主管id的学生。然后创建另一个查询,在该查询中选择
user\u id
与第一次执行的查询匹配的所有任务


这似乎不是一个非常有效的方法来实现这个结果。有更好的选择吗?

您正在寻找的是一个更好的选择。与编写两个单独的查询来获取信息不同,联接将允许您连接一个查询中的表,并更快地获取所需的信息

select ud.supervisor_id, ud.user_id, t.task_id
from user_details ud, users u
where ud.user_id = t.user_id
Select *
From user_details ud
  join tasks t
  on ud.user_id = t.user_id
Where ud.supervisor_id = ?

联接本质上允许您从正在使用的表的所有列中创建一个大表。关键字上的
告诉sql哪些值在一起,这样您就知道所有任务都属于id与主管的id匹配的学生。然后,您可以从任意一个表中选择您喜欢的任何列(以及许多其他奇特的东西)。

如何选择?您如何拥有一个数据库而不知道连接?我真的很困惑。