Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.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/MySQL中如何计算多行上两列之间的时差_Php_Mysql_Date_Time - Fatal编程技术网

在PHP/MySQL中如何计算多行上两列之间的时差

在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))

我有以下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))
    {
        $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行