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

时间:2014-07-15 20:24:59

标签: php mysql sql database

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

  

用户

     

user_details

     

任务

用户表的主列是:

  

id {PK}

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

  

user_id {PK,FK} | supervisor_id {FK}

supervisor_id是users表中的id。每个学生都有一名主管。

最后,有一个任务表,只有学生创建任务,任务表的主要栏目是:

  

task_id {PK} | USER_ID {FK}

我遇到的问题是,如果主管想要查看他所有的学生任务,那么可以获得正确的查询。我知道您可以查询user_details表中拥有主管ID的所有学生。然后创建另一个查询,在其中选择user_id与第一个查询执行的任务匹配的所有任务。

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

2 个答案:

答案 0 :(得分:1)

select ud.supervisor_id, ud.user_id, t.task_id
from user_details ud, users u
where ud.user_id = t.user_id

答案 1 :(得分:0)

您要找的是join。连接不是编写两个单独的查询来获取信息,而是允许您连接一个查询中的表,并更快地获取所需的信息。

Select *
From user_details ud
  join tasks t
  on ud.user_id = t.user_id
Where ud.supervisor_id = ?

join实际上允许您从正在使用的表的所有列中创建一个大表。 on关键字告诉sql哪些值组合在一起,以便您知道所有任务都属于id与主管ID相匹配的学生。然后,您可以从任一表格中选择您喜欢的任何列(以及许多其他奇特的东西)。