我想显示与我同一部门的员工叶子。我只想要与我同一部门的员工,但输出显示数据库中的所有员工
这是我的数据库
表格离开:{Leave_ID(PK),Data_Apply,Leave_Type,Status,Emp_ID(FK)}
表员工:{Emp_ID(PK),Emp_Name,Dept_ID(FK)}
表部门:{Dept_ID(PK),Dept_Name,Dept_Desc}
作为一个例子,我是市场营销部门的负责人,我希望看到员工在我和同一个部门的详细信息。我试图使用函数in_array来显示但是失败了。
这是我的代码
<?php
//$test = mysql_query("select * from employee");
//if(in_array($search["Dept_ID"], array($test)))
$result = mysql_query("select * from `leave`");
if ($result == FALSE)
{
die(mysql_error());
}
while($row = mysql_fetch_assoc($result))
{
?>
<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["Status"];?></td>
<td><a href="app_status.php?id=<?php echo $row['Leave_ID'];?>" target = "_blank">Profile</a></td>
</tr>
<?php
}
?>
是否有任何功能或任何建议使用。我是编程新手,抱歉我的英文不好
答案 0 :(得分:2)
$department_id = 4;
$result = mysql_query(' select l.*
from leave as l
join employee as e
on l.emp_id = e.emp_id
where e.dept_id = '.mysql_real_escape_string($department_id));
$department_name = 'this one';
$result = mysql_query(" select l.*
from leave as l
join employee as e
on l.emp_id = e.emp_id
join department as e
on d.dept_id = e.dept_id
where d.dept_name like '%".mysql_real_escape_string($department_name))."%'");
修改强>
在阅读了那里的第一条评论之后,我认为你说你基本上有一个employee_id
并且你想要过滤该员工的部门的查询。所以......这里有一些代码可以做到:
http://sqlfiddle.com/#!2/41bf7/1/0
那里有两个问题......它们大致相同,所以我会选择哪个更易于理解。你可以像这样将它们添加到PHP中(使用sql小提琴中的第一个查询):
$logged_in_employee_id = 1;
$result = mysql_query('select e.emp_id, e.emp_name,
l.date_apply, l.leave_type, l.status,
d.dept_name, d.dept_desc
from `leave` as l
join employee as e
on l.emp_id = e.emp_id
join department as d
on d.dept_id = e.dept_id
where d.dept_id in (
select dd.dept_id
from employee as ee
join department as dd
on dd.dept_id = ee.dept_id
where ee.emp_id = '.mysql_real_escape_string($logged_in_employee_id)).' )');
我不确定您获取employee_id
或department_id
的位置,但请确保清理并验证您在此类查询中添加的任何内容。我正在使用mysql_real_escape_string
这有帮助,但如果有人劫持了您的POST
数据(或其他内容)并使用字符串而不是整数值,那么查询仍然会中断。 StackOverflow上有一些关于如何做到这一点的好帖子;只需搜索清理输入,使用PHP进行sql注入,以及如何执行预准备语句或使用PDO。
答案 1 :(得分:0)
尝试更改您的查询(在“离开”表中获取所有记录的那一刻) 假设您知道部门的代码,您可以使用类似的东西(未经测试):
SELECT leave.*, employee.Emp_Name, department.Dept_Name, department.Dept_Desc
FROM leave, employee, department
WHERE leave.Emp_ID=employee.Emp_ID
AND department.Dept_ID=employee.Dept_ID
AND department.Dept_ID="<your department ID>"