2016-04-22 146 views
0

嗨我试图找到员工在具体日期的出席表,如果该员工ID不存在,所以它应该被标记为('缺席')如何检查考勤表中是否存在员工ID?

请帮我解决它。

$dateof = date('Y-m-d', strtotime($_POST['attdateof'])); 
    $allemp = mysql_query("SELECT empid FROM `attendance` WHERE todaydate = '2016-03-17'"); 
    if(mysql_num_rows($allemp) > 0) 
    { 
     $emp_from_detail = mysql_query("SELECT id FROM `empdetail`"); 
    (int)$empdetailid = array(); 
      while($emp = mysql_fetch_array($emp_from_detail)) 
      { 
       $empdetailid[] = $emp[0]; 
      } 
     (int)$id_in_att = array(); 
      while($e = mysql_fetch_array($allemp)) 
      { 
       $id_in_att = $e[0]; 
      } 
     for($i = 0; $i <= mysql_num_rows($emp_from_detail); $i++) 
     { 

      if($empdetailid[$i] != $id_in_att[$i]) 
       { 
        $markappcent = mysql_query("INSERT INTO `attendance`(`id`,`empid`, `empstatus`, `todaydate`) VALUES ('','".$empdetailid[$i]."','Absent','".$_POST['attdateof']."')"); 
        if($markappcent) 
        {echo"<script>alert('Marked Successfully. ".$empdetailid[$i]."');</script>";} 
        else 
        {echo"<script>alert('Try Again ".$empdetailid[$i]."');</script>";} 
       } 

     } 

    } 
    else 
        {echo"<script>alert('Data not found');</script>";} 
+0

给我们你的表结构... –

+1

您使用弃用的API连接已在PHP7被删除到MySQL(mysql_ *)。此外,您的代码对SQL注入开放! –

+0

说得简单一点,如果他们还没有在'attendance'中使用'todaydate = yourdate',你想从'empdetail'中加入'Absent'来插入所有员工? –

回答

1

好吧,这可以通过一个查询来解决。是这样的:查询

INSERT INTO attendance 
SELECT NULL as id, empdetail.id as empid, 'Absent' as empstatus, '2016-03-17' as empdate 
FROM empdetail WHERE id NOT IN (
    SELECT empid 
    FROM attendance 
    WHERE todaydate = '2016-03-17' 
) 

解释: 首先是所有的考勤表,其中日期是今天选择。 然后从empdetail表中选择所有,其中雇员的id不在先前选择的人(其中已存在)的集合中,并且将该选择的结果插入考勤表中。

它也可以通过连接而不是子查询,但它认为这更清楚(只是我的看法)。

正如评论中提到的:谨防sql注入。

希望查询帮助..

+0

亲爱的先生,我希望得到所有员工的ID不存在于特定日期的出席表上。你能给我电话询问它吗? –

+0

我已编辑我的答案来解释查询。 – Jimmmy

0

您好我有此查询解决我的问题

Select * from `empdetail` e left join `attendance` a on e.id = a.empid and a.todaydate = '2016-04-21' where empstatus is null 
0

其不准确答,但你必须做这样的事情

必须环路整个emp ID和检查in_array考勤表id存在或不存在.if存在意味着只是回声其他else标记他缺席

希望它可以帮助你 in_array功能

for($i = 0; $i <= mysql_num_rows($emp_from_detail); $i++) 
     { 

      if(in_array($empdetailid[$i],$id_in_att) 
       { 

         echo "id exists ".; 
       } 
       else 
       { 



        $markappcent = mysql_query("INSERT INTO `attendance`(`id`,`empid`, `empstatus`, `todaydate`) VALUES ('','".$empdetailid[$i]."','Absent','".$_POST['attdateof']."')"); 
        if($markappcent) 
        {echo"<script>alert('Marked Successfully. ".$empdetailid[$i]."');</script>";} 
        else 
        {echo"<script>alert('Try Again ".$empdetailid[$i]."');</script>";} 

       } 

     }