在PHP/MySQL中如何计算多行上两列之间的时差
我有以下PHP代码:在PHP/MySQL中如何计算多行上两列之间的时差,php,mysql,date,time,Php,Mysql,Date,Time,我有以下PHP代码: $sql="SELECT ticket_seq, SUM(TIMEDIFF(timeend, timestart)) as total FROM ticket_updates GROUP BY ticket_seq"; $rs=mysql_query($sql,$conn) or die(mysql_error()); if(mysql_num_rows($rs) > 0) { while($result=mysql_fetch_array($rs))
$sql="SELECT ticket_seq, SUM(TIMEDIFF(timeend, timestart)) as total FROM ticket_updates GROUP BY ticket_seq";
$rs=mysql_query($sql,$conn) or die(mysql_error());
if(mysql_num_rows($rs) > 0)
{
while($result=mysql_fetch_array($rs))
{
$sql2="SELECT * from tickets where ticketnumber = '".$result["ticket_seq"]."' ";
$rs2=mysql_query($sql2,$conn) or die(mysql_error());
$result2=mysql_fetch_array($rs2);
$sql3="SELECT * from customer where sequence = '".$result2["company"]."' ";
$rs3=mysql_query($sql3,$conn) or die(mysql_error());
$result3=mysql_fetch_array($rs3);
if($result["total"] > $result3["support_hours"])
{
echo $result3["company"].' - '.$result["total"].'<br>';
}
}
}
$sql=“按票证顺序从票证更新组中选择票证顺序和(TIMEDIFF(timeend,timestart))作为总计”;
$rs=mysql\u query($sql,$conn)或die(mysql\u error());
如果(mysql_num_行($rs)>0)
{
而($result=mysql\u fetch\u数组($rs))
{
$sql2=“从ticketnumber=”的票证中选择*”$result[“票证顺序”]。”;
$rs2=mysql\u query($sql2,$conn)或die(mysql\u error());
$result2=mysql\u fetch\u数组($rs2);
$sql3=“从客户中选择*,其中序列=”$result2[“公司”]。”;
$rs3=mysql\u query($sql3,$conn)或die(mysql\u error());
$result3=mysql\u fetch\u数组($rs3);
如果($result[“total”]>$result3[“支持时间”])
{
回显$result3[“公司”]。-。$result[“总计”]。
;
}
}
}
但当我回显$result[“total”]时,我得到的只是随机数
我试图为多行选择timestart和timeend之间的时差,并将其相加 我想这样的事情会解决你的问题
SELECT SUM(
(SELECT TIMEDIFF(timeend, timestart) FROM ticket_updates GROUP BY ticket_seq)
)
快速播放和类似的内容可以做到:-
$sql="SELECT ticket_updates.ticket_seq, customer.company, SUM(CAST((UNIX_TIMESTAMP(timeend) - UNIX_TIMESTAMP(timestart)) AS UNSIGNED)) as total
FROM ticket_updates
INNER JOIN tickets ON tickets.ticketnumber = ticket_updates.ticket_seq
INNER JOIN customer ON customer.sequence = tickets.company
GROUP BY ticket_updates.ticket_seq, customer.company
HAVING total > (customer.support_hours*60*60)";
$rs=mysql_query($sql,$conn) or die(mysql_error());
if(mysql_num_rows($rs) > 0)
{
while($result=mysql_fetch_array($rs))
{
echo $result3["company"].' - '.$result["total"].'<br>';
}
}
$sql=“选择ticket\u updates.ticket\u seq,customer.company,SUM(将((UNIX\u时间戳(timeend)-UNIX\u时间戳(timestart))转换为未签名)作为总计
从票证更新
票证上的内部联接票证。票证编号=票证更新。票证顺序
在customer.sequence=tickets.company上内部加入客户
按票证更新分组。票证顺序,客户。公司
总计>(客户支持小时数*60*60)”;
$rs=mysql\u query($sql,$conn)或die(mysql\u error());
如果(mysql_num_行($rs)>0)
{
而($result=mysql\u fetch\u数组($rs))
{
回显$result3[“公司”]。-。$result[“总计”]。
;
}
}
这是将日期/时间字段转换为unix时间戳,查找差异并将其转换为unsigned,然后根据支持小时数乘以60和60(即从小时转换为秒)检查这些字段是否为日期/时间字段,或者它们可能是unix时间戳?它们是DATETIME字段不确定您是否可以有效地汇总一个日期/时间,这是TIMEDIFF的结果。可能最好转换为unix时间戳,从另一个时间戳中减去一个时间戳,然后对得到的秒数求和。另外,查看该代码,您可能可以使用一个SELECT,连接到其他表,而不是一个SELECT并循环结果,然后对每个结果执行2。单选可能会快得多。当我尝试这段代码时,我得到一个错误:子查询返回的行数超过1行