用PHP计算MySQL查询返回的平均时间

用PHP计算MySQL查询返回的平均时间,php,mysql,Php,Mysql,我从查询中以时间格式返回了3次,它们是: 00:31:36 00:32:58 00:11:59 我想以相同的格式得到这些时间的平均值 目前我正在尝试使用 date('H:i:s', array_sum(array_map('strtotime', $results->[6])) / count($results->[6])) 但是如果我把输出增加到'm/d/y H:I:s',我得到的输出是19:00:00,我得到的是12/31/69 19:00:00。如果我删除'strotime'

我从查询中以时间格式返回了3次,它们是: 00:31:36 00:32:58 00:11:59

我想以相同的格式得到这些时间的平均值

目前我正在尝试使用

date('H:i:s', array_sum(array_map('strtotime', $results->[6])) / count($results->[6]))
但是如果我把输出增加到'm/d/y H:I:s',我得到的输出是19:00:00,我得到的是12/31/69 19:00:00。如果我删除'strotime',我仍然会得到相同的输出


感谢您的帮助

不要依赖PHP来执行AVG聚合,而是在效率更高的地方使用DB:


适合我的解决方案中选择秒到秒的时间(平均(time-to-sec()))

<?php  $totalTime = 0;
        $sql = 'SELECT * FROM ' . TABLE_HTA . ' WHERE date_time >= curdate() AND employee_id = "4104" ORDER BY order_id ASC';

        $orders = $db->Execute($sql);
        if($orders->RecordCount() > 0) {
        while(!$orders->EOF) {
        $totalRuns = $totalRuns + 1;
        $str_time = $orders->fields['otd_time'];
        $str_time = preg_replace("/^([\d]{1,2})\:([\d]{2})$/", "00:$1:$2", $str_time);
        sscanf($str_time, "%d:%d:%d", $hours, $minutes, $seconds);
        $time_seconds = $hours * 3600 + $minutes * 60 + $seconds;
        $orders->MoveNext();
            }
           }
        $otdAverage = $totalTime / $totalRuns;
        echo gmdate("H:i:s", $otdAverage);?>

为什么不以秒为单位处理这些持续时间(而不是“时间”?
$results->[6]
是字符串吗?因为从你所说的来看,这可能是你的问题,因为数组映射需要一个数组。似乎在数据库中聚合它的效率要高出数十万倍。类似于从
中选择秒到秒的时间(avg(time-to-sec()))我只是在学习这个。我希望我是个专家。但我不是。我尝试过使用find[link]函数,但没有成功。我试着转换成整数。在发布之前,我已经花了6个小时来研究这个问题,因为我确信答案就在那里。我似乎找不到它。我会先把这一行分成多行,努力“分离关注点”,让它更容易调试。从那个里,你们可能会发现这个等式偏离了你们的目标行为。我一直在尝试,但并没有得到任何结果。如果我回显日期('h:I:s',$result),我仍然什么也得不到。我的列是old_time,因此我必须
从表_HTA中选择sec_to_time(avg(time_to_sec())$后果回声$结果;回显日期($H:i:s',$result)
Yes字段otd_time是mysql中的时间类型。表中的字段是“time”类型吗?表中的字段显示为00:31:36 00:32:58 00:11:59如果时间存储为字符串,请尝试:
SELECT sec_to_time(avg(time_to_sec)(str_to_date(,'%H:%k'))从
将潜在字符串字段转换为时间格式,然后将其转换为秒,然后取平均值,然后再次将其作为时间返回。这将导致分析错误:语法错误,意外“:”