从多个表中提取数据

时间:2015-02-04 10:15:14

标签: mysql

我有4个名为Student, Applications, Company, Internships的表。他们的主键是s_id, a_id, c_id, i_id。进一步的实习有一个名为by_c_id的列,应用程序有by_s_id,for_i_id。

那么如何通过i_id =""来显示实习申请表。

使用c_id登录的用户应该看到

Student's Details
Answer in Application.

如何实现这一目标。

我知道由于这个问题我可能会降到零代表,但这一切都让人感到困惑。

Select Student's Detail from Student where by_s_id=s_id, select Answers from Applications, where for_i_id=i_id.

修改

预期输出类似于在线求职平台,公司可以查看申请人的详细信息及其对问题的回答。

此处的回复存储在应用程序中,申请人的详细信息在学生中。

另一个编辑

这就是我实现它的方式。我知道这不是正确的方法,但我错过了上一学期的加入和查看课程。

$query= "SELECT * FROM APPLICATIONS
        WHERE
        for_i_id='$i_id'";
$query1= mysqli_query($dbhandle, $query);

$count= mysqli_num_rows($query1);
if(!$query1 || $count==0)
{
echo "No Applications to be displayed";
}
else
{
while($row=mysqli_fetch_assoc($query1))
{
echo $row['by_s_id'];

$query2 ="SELECT `Question1`,`Question2` FROM INTERNSHIPS
          WHERE
          i_id='".$row['for_i_id']."' ";

$query3= mysqli_query($dbhandle, $query2);

$s_id=$row['by_s_id'];

$query4= "SELECT * FROM STUDENT
          WHERE
          id='$s_id'";

$query5= mysqli_query($dbhandle,$query4);
if(!$query3)
{
echo 'MySQL Error: ' . mysqli_error();
        exit;
}

2 个答案:

答案 0 :(得分:1)

以下是另一种使用LEFT JOIN将学生和实习表加入应用程序表的方法:

SELECT Student.FirstName, Student.FamilyName, Applications.Answers FROM Applications
LEFT JOIN Student ON Applications.by_s_id=Student.id 
LEFT JOIN Internships ON Applications.for_i_id=Internships.i_id  
WHERE Internships.i_id='something';

在这种情况下,不需要外键。

答案 1 :(得分:0)

假设:一个申请涉及一个实习,一个申请涉及一个学生。

Select S.*, A.* From Students S, Applications A, Internships I Where S.s_id = I.s_id And A.i_id = I.i_id And I.i_id = 'something' 

毋庸置疑,您必须确保恰当地在四个表格中显示primary keysforeign keys。如果存在one-to-many relationships,则查询可能必须不同。我建议你阅读我在答案中使用的关键词,了解发生了什么。