如何显示外键数据

时间:2013-08-26 10:14:18

标签: php mysql

我有三张桌子(休假,员工,部门)

这是我的数据库

员工表: {Emp_ID(PK),Emp_Fname,Emp_Lname,ContactNo_HP,ContactNo_Home,Emp_Email,Dept_ID(FK)}

离开表格: {Leave_ID(PK),Date_Apple,Leave_Type,Leave_Start,Leave_End,Status,Emp_ID(FK)}

部门表: {Dept_ID(PK),Dept_Name,Dept_Desp}

当我点击“详细信息”时,它将出现一个新页面。只有具体的

<tr>
    <td><?php echo $row["Leave_ID"];?></td>
    <td><?php echo $row["Emp_ID"];?></td>
    <td><?php echo $row["Date_Apply"];?></td>
    <td><?php echo $row["Leave_Type"];?></td>
    <td><?php echo $row["Leave_Start"];?></td>
    <td><?php echo $row["Leave_End"];?></td>
    <td><?php echo $row["Status"];?></td>
    <td><a href="app_status.php?id=<?php echo $row[Leave_ID];?>"
           target="_blank">Detail</a></td>
</tr>

在新页面中我有问题要显示(Emp_Name,Dept_Name,ContactNo_HP,ContactNo_Home),因为Emp_ID是离开表中的外键,而Dept_Name是在department表中,它将Dept_ID链接为employee表中的外键。

我在新页面中使用以下语句来显示数据

<?php
    $result = mysql_query("select * from `leave`");
    $row = mysql_fetch_assoc($result);
?>

1 个答案:

答案 0 :(得分:0)

首先,您必须在详细信息页面中检索Leave_ID:

$leaveID = $_GET['Leave_ID'];

然后你必须编写一个从三个表中选择的SQL代码并将其分配给一个变量(如$ sql):

select t1.Emp_Name, t2.Dept_Name, t1.ContactNo_HP, t1.ContactNo_Home
  from employee as t1 inner join department as t2
       on t1.Dept_ID = t2.Dept_ID inner join `leave` as t3
       on t3.Emp_ID = t1.Emp_ID
 where t3.Leave_ID = ?

此时我建议您使用带有预准备语句的MySQLi对象:

$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("i", $leaveID);
$stmt->execute();
$stmt->bind_result($empName, $deptName, $contactNoHP, $contactNoHome);
while ($stmt->fetch()) {
    \\your code to display details here
}
$stmt->close();
$mysqli->close();

请注意:

  1. “leave”是一个保留字,因此您必须将它括在SQL语句中的后引号之间;
  2. 您的页面中有Emp_ID,因此您应该传递它而不是Leave_ID;这将有助于您编写更清晰的SQL语句。