2016-04-22 94 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>";} 

       } 

     }