显示同一部门的员工休假

时间:2013-08-29 21:42:12

标签: php mysql sql

我想显示与我同一部门的员工叶子。我只想要与我同一部门的员工,但输出显示数据库中的所有员工

这是我的数据库

表格离开:{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
        }

    ?>

是否有任何功能或任何建议使用。我是编程新手,抱歉我的英文不好

2 个答案:

答案 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_iddepartment_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>"