简体   繁体   中英

Calculating time difference between two db values for multiple rows

I have a database which holds two timestamps (date_ticket_reported, date_ticket_resolved), I want to caluclate the average time difference between these times for each resolved_by user_id.

Each row has a (resolved_by) column which corresponds to a user_id.

There will be multiple rows, for each user_id.

I have tried various approaches including the following.

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;

    }

}

Ticket view code

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

So to summarise; I want to display the average time between date_ticket_reported, date_ticket_resolved. For each user_id specified.

Any help would be awesome!

I have tried Malkhazi Dartsmelidze answer,

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

I get an error saying Object of class CI_DB_mysqli_result could not be converted to string

Where you say resolved_by as user. Should "user" be the user_id? ie should it say "resolved_by as user_id"?

You Can run only One Query With Myqsl:

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

This returns Average Time Difference in Seconds for Each User

Try this

 $resolved2 = $resolved1->resolved_date;
 $reported2 = $reported1->ticket_date_reported;

 $diff = $resolved2 - $reported;

And then echo $diff and check what you are getting in $diff,

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM