首页 > 解决方案 > 计算多行的两个 db 值之间的时间差

问题描述

我有一个包含两个时间戳(date_ticket_reported、date_ticket_resolved)的数据库,我想计算每个resolved_by user_id 的这些时间之间的平均时间差。

每行都有一个对应于 user_id 的 (resolved_by) 列。

对于每个 user_id,会有多行。

我尝试了各种方法,包括以下方法。

ticket_model.php code    
public function get_resolved_time_by_user($user_id){
    $query1 =    $this->db->select('resolved_date')->from('tickets')->where('resolved_by',$user_id)->get();
    $resolved1 =  $query1->row();
    $query2 = $this->db->select('ticket_date_reported')->from('tickets')->where('resolved_by',$user_id)->get();
    $reported1 = $query2->row();

    $resolved2 = $resolved1->resolved_date;
    $reported2 = $reported1->ticket_date_reported;
    foreach($resolved2 as $row){
    //Convert them to timestamps
    $reported_dateTimestamp = strtotime($resolved2);
    $resolved_dateTimestamp = strtotime($reported2);

    $diff = $resolved_dateTimestamp - $reported_dateTimestamp;
    return $diff;

    }

}

票务查看代码

<p> Average Resolve Times  <?php echo $this->ticket_model->get_resolved_time_by_user($user_id); ?> </p>   

总结一下;我想显示 date_ticket_reported、date_ticket_resolved 之间的平均时间。对于每个指定的 user_id。

任何帮助都是极好的!

我试过 Malkhazi Dartsmelidze 的回答,

$this->db->query("SELECT 
AVG(TIMESTAMPDIFF(SECOND, resolved_date, ticket_date_reported)) as     timediff,
    resolved_by as user
FROM tickets 
GROUP BY resolved_by");

我收到一条错误消息,说 CI_DB_mysqli_result 类的对象无法转换为字符串

你说resolved_by作为用户的地方。“用户”应该是 user_id 吗?即它应该说“resolved_by as user_id”吗?

标签: phpmysqlcodeigniter

解决方案


您只能使用 Myqsl 运行一个查询:

SELECT 
    AVG(TIMESTAMPDIFF(SECOND, resolved_date, ticket_date_reported)) as timediff,
    resolved_by as user
FROM tickets 
GROUP BY resolved_by

这将返回每个用户的平均时间差(以秒为单位)


推荐阅读