计算多个行的两个db值之间的时间差

时间:2019-03-26 14:21:41

标签: php mysql codeigniter

我有一个数据库,其中包含两个时间戳记(date_ticket_reported,date_ticket_resolved),我想计算每个时间的平均时差(由user_id解析)。

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

每个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”吗?

2 个答案:

答案 0 :(得分:2)

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

template<class T, unsigned size>
constexpr auto flat_size (T (&arr)[size]) {
    using E = std::remove_all_extents_t<T>;
    return sizeof arr / sizeof (E);
}

template<class T, unsigned size, class BinOp = std::plus<>>
auto arr_accumulate_trivial(
    T (&arr)[size], std::remove_all_extents_t<T> init = {}, BinOp op = {})
{
    using E = std::remove_all_extents_t<T>;
    static_assert(std::is_trivially_copyable_v<E>);
    std::array<E, flat_size(arr)> flat;
    std::memcpy(flat.data(), arr, sizeof arr);
    return std::accumulate(std::begin(flat), std::end(flat), init, op);
}

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

答案 1 :(得分:0)

尝试

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

 $diff = $resolved2 - $reported;

然后回显$ diff并检查您在$ diff中得到了什么,