Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用php计算从sql server中的同一列中删除两个字段_Php_Sql Server_Sqlsrv - Fatal编程技术网

如何使用php计算从sql server中的同一列中删除两个字段

如何使用php计算从sql server中的同一列中删除两个字段,php,sql-server,sqlsrv,Php,Sql Server,Sqlsrv,我有SQL server数据库,我使用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中选择时间,并将其减

我有SQL server数据库,我使用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);

对于给定的结果,您可以执行以下操作。但是如果要扩展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);

看不到图片,你能不能也发布你的回音结果。一个简单的方法是检查相同的日期(记录之间)并减去计算工作时间的时间。。我可以这样做,但在数据库中我有4000行,所以如果我为每个员工输入,它将不起作用,而且是有效的,如果这是你的意思,但如果不是,请你告诉我你的意思是什么?链接对我来说被阻止了,所以我看不到图片。但我建议您可能必须对查询本身执行此操作。试试这个,我可以用query来做,但是我的主管想要用php来做。这也被阻止了。你能把它插入你的帖子里吗。