0

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

这是我的数据库

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

    ?>

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

4

2 回答 2

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 fiddle 中的第一个查询):

$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)).' )');

我不确定你从哪里得到 theemployee_id或 thedepartment_id但请确保你清理并验证你放入这样的查询中的任何内容。我正在使用mysql_real_escape_stringwhich 有帮助,但如果有人劫持您的POST数据(或其他东西)并使用字符串而不是整数值,该查询仍然会中断。StackOverflow 上有一些关于如何做到这一点的精彩帖子;只需搜索清理输入、使用 PHP 进行 sql 注入以及如何执行准备好的语句或使用 PDO。

于 2013-08-29T21:51:44.430 回答
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>"
于 2013-08-29T21:51:33.027 回答