如何使用php计算从sql server中的同一列中删除两个字段
我有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计算从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中选择时间,并将其减
<?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."   ";
ECHO $R2."    ";
ECHO $R3."    ";
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."   ";
ECHO $R2."    ";
ECHO $R3."    ";
ECHO $R4."</BR> ";
}
ECHO "User:".$R1." for date".$R2." worked for ".($exitTime - $enterTime);
}
sqlsrv_free_stmt( $Fstmt);
看不到图片,你能不能也发布你的回音结果。一个简单的方法是检查相同的日期(记录之间)并减去计算工作时间的时间。。我可以这样做,但在数据库中我有4000行,所以如果我为每个员工输入,它将不起作用,而且是有效的,如果这是你的意思,但如果不是,请你告诉我你的意思是什么?链接对我来说被阻止了,所以我看不到图片。但我建议您可能必须对查询本身执行此操作。试试这个,我可以用query来做,但是我的主管想要用php来做。这也被阻止了。你能把它插入你的帖子里吗。