0

我有 SQL 服务器数据库,我正在使用 php 连接到它并使用查询。我已经从数据库中为一名员工读取了两条记录。我需要他们计算员工的工作时间。但我不知道如何从同一列中选择字段到同一员工。如图所示:

E003 2014-03-17 08:10:12 2221

E003 2014-03-17 10:05:02 2222

E003 2014-03-17 12:15:20 2221

E003 2014-03-17 15:03:30 2222

2221是入口门,2222是出口门。我想从 2222 中选择时间并减去它们以获得员工的工作时间。你能帮我解决这个问题吗,这是我的代码:

<?php

$host = "servername\instancename";
$connectionInfo = array( "Database"=>"AccessCard", "UID"=>"", "PWD"=>"");
$conn = sqlsrv_connect( $host, $connectionInfo);
if( $conn === false ) {
    die( print_r( sqlsrv_errors(), true));
}
echo "</br>"; 

/**********************************************/
$FRISTsql = "SELECT [EmpID],[DATE],[TIME],[OBJECT] FROM [AccessCard].[dbo].[TimeAtt] WHERE [EmpID]='E003'";
$Fstmt = sqlsrv_query( $conn, $FRISTsql );
if( $Fstmt === false) {
    die( print_r( sqlsrv_errors(), true) );
}
while( $Frow = sqlsrv_fetch_array( $Fstmt, SQLSRV_FETCH_ASSOC) ) {

      $R1 = $Frow['EmpID'];
      $R2 = $Frow['DATE']->format('Y-m-d');
      $R3 = $Frow['TIME']->format('H:i:s');
      $R4 = $Frow['OBJECT'];

     ECHO $R1." &nbsp&nbsp";
     ECHO $R2." &nbsp&nbsp&nbsp";
     ECHO $R3." &nbsp&nbsp&nbsp";
     ECHO $R4."</BR> ";

}
sqlsrv_free_stmt( $Fstmt);
4

1 回答 1

0

对于给定的结果,您可以执行以下操作。但是对于 4000 条记录,您可能需要寻找一些查询操作。

请检查日期比较部分,因为我的 PHP 语法和函数可能不正确。但这可以用作一般概念。

 <?php

    $host = "servername\instancename";
    $connectionInfo = array( "Database"=>"AccessCard", "UID"=>"", "PWD"=>"");
    $conn = sqlsrv_connect( $host, $connectionInfo);
    if( $conn === false ) {
        die( print_r( sqlsrv_errors(), true));
    }
    echo "</br>"; 

    /**********************************************/
    $FRISTsql = "SELECT [EmpID],[DATE],[TIME],[OBJECT] FROM [AccessCard].[dbo].[TimeAtt] WHERE [EmpID]='E003' order by [DATE],[TIME]";
    $Fstmt = sqlsrv_query( $conn, $FRISTsql );
    if( $Fstmt === false) {
        die( print_r( sqlsrv_errors(), true) );
    }
else {
$enterTime; $exitTime;
    while( $Frow = sqlsrv_fetch_array( $Fstmt, SQLSRV_FETCH_ASSOC) ) {

          $R1 = $Frow['EmpID'];
          $R2 = $Frow['DATE']->format('Y-m-d');
          $R3 = $Frow['TIME']->format('H:i:s');
          $R4 = $Frow['OBJECT'];
    if($enterTime == null && $R4 == 2001)
    {
             $enterTime = $R3;
     }
    if($exitTime == null && $R4 == 2002)
    {
             $exitTime = $R3;
     }
    else if($R3 < $enterTime && $R4 == 2001)
    {
            $enterTime = $R3;
    }
    else if($R3 > $exitTime && $R4 == 2002)
    {
            $exitTime = $R3;
    }
         ECHO $R1." &nbsp&nbsp";
         ECHO $R2." &nbsp&nbsp&nbsp";
         ECHO $R3." &nbsp&nbsp&nbsp";
         ECHO $R4."</BR> ";

    }
ECHO "User:".$R1." for date".$R2." worked for ".($exitTime -  $enterTime);
}
    sqlsrv_free_stmt( $Fstmt);
于 2014-03-18T09:01:28.273 回答