0

我有这个查询,我在其中获取 CSV 文件并将其导入到我的 PHP 文件中,其中包含查询和条件并计算其内容。我有 3 张桌子

  1. 生物识别(id_biometrics、empno、date_created、time_created、status、device)
  2. user_dummy (id_user, leave_credits, empno)
  3. 出勤(id_attendance、fk_user、date_created、time_created、time_in、time_out、total_hours、actual_ot、actual_ut)

我的excel文件有empno、date_created、time_created、status、device

我想要的是在我的出勤表中插入不重复的忽略数据并计算它的 time_in、time_out、total_hours、actual_ot、actual_ut。我有一个条件 user_dummy.id_user=attendance.fk_user。我仍在输入自动增量的 id_attendance、fk_user、date_created、time_created、time_in(time_created status=0 )、time_out( time_created status=1 )、total_hours(time_in+time_out)、actual_ot(如果超过 9 小时则加班)、actual_ut (如果少于 9 小时,则超时)

这是我使用的代码:

<?php
//include "connect.php";//header('Content-type: application/json');$link=mysql_connect("localhost","root","") or die("Cannot Connect to the database!");`

 mysql_select_db("hris",$link) or die ("Cannot select the database!");
// Set your CSV feed
$feed = 'SampleLogs.csv';
//$uploadid = 2;
// Arrays we'll use later
$keys = array();
$newArray = array();

 // Function to convert CSV into associative array
function csvToArray($file, $delimiter) { 
  if (($handle = fopen($file, 'r')) !== FALSE) { 
    $i = 0; 
    while (($lineArray = fgetcsv($handle, 0, $delimiter, '"')) !== FALSE) { 
      for ($j = 0; $j < count($lineArray); $j++) { 
        $arr[$i][$j] = $lineArray[$j]; 
      } 
      $i++; 
    } 
    fclose($handle); 
  } 
  return $arr; 
} 
// Do it
$data = csvToArray($feed, ',');

// Set number of elements (minus 1 because we shift off the first row)
$count = count($data);

//Use first row for names  
$labels = array('empno','date_created','time_created','status','device');  

foreach ($labels as $label) {
  $keys[] = trim($label);
}


// Bring it all together
for ($j = 0; $j < $count; $j++) {
  $d = array_combine($keys, $data[$j]);
  $newArray[$j] = array_map('trim',$d);
}
//count number of rows in database
$q = "SELECT * FROM attendance";
$res = mysql_query($q);
$numrows = mysql_num_rows($res);
$slicearray = array_slice($newArray,$numrows);
    echo $numrows;
    var_dump($slicearray);
    //$reverse = array_reverse($newArray,true);
    //var_dump($reverse);
    //$uniqueid = uniqid();
foreach($slicearray as $key=>$value){

       $implodearray = "'" . implode($value, "','") . "'";
       $keysString = implode(",", array_keys($value)); 
       $keylower = strtolower(str_replace(str_split(" '-/"),'_',$keysString));

        $sql = "INSERT INTO biometrics ($keylower)
                SELECT * FROM (SELECT '".$value['empno']."','".$value['date_created']."','".$value['time_created']."','".$value['status']."' as status,'".$value['device']."' as device) As tmp
                WHERE NOT EXISTS (SELECT $keylower FROM biometrics WHERE empno = '".$value['empno']."' AND date_created = '".$value['date_created']."' AND time_created = '".$value['time_created']."' AND status = '".$value['status']."' AND device = '".$value['device']."')";
       mysql_query($sql) or die(mysql_error());
       $sql1= "INSERT IGNORE INTO attendance(fk_user,date_created,time_in,time_out,total_hours)
               SELECT user_dummy.id_user,'".$value['date_created']."',t2.time_in,t2.time_out,'null'
               FROM
               (SELECT empno,date_created,
               MIN(CASE WHEN status = 0 THEN time_created else '0' END) AS time_in,
               MAX(CASE WHEN status = 1 THEN time_created else '0' END) AS time_out
               FROM biometrics
               GROUP BY empno,date_created
               )AS t2
               left join user_dummy on t2.empno= user_dummy.empno
               where user_dummy.id_user IS NOT NULL AND '".$value['empno']."' = user_dummy.empno

               ";               

       mysql_query($sql1) or die(mysql_error());
       echo $sql;

       //var_dump($keylower);
       //var_dump($value);

    }

?>

它正在工作,但我遇到未知问题,它循环了 2 次或 4 次。我不知道发生了什么。有人可以帮我吗?这是我在学校的项目。

我尝试使用 Load infile 但我认为我不能在 Load infile 中有条件

4

0 回答 0