首页 文章

我可以运行CodeIgniter数据库查询而不从类中清除它吗?

提问于
浏览
0

我使用CodeIgniter数据库类来生成结果,然后使用分页类来导航它们 . 我有一个模型从表中检索成员结果 . 我想计算查询中的总行数,以便将其传递给分页类 . count_all db helper函数是不够的,因为它不考虑我包含的任何“where”或“join”子句 .

如果这是我的查询:

$this->db->select('m.user_id AS id, m.email_address, m.display_name, m.status, UNIX_TIMESTAMP(m.join_date) AS join_date,
            l.listing_id, COUNT(l.member_id) AS total_listings,
            g.group_id AS group_id, g.title AS group_title')
    ->from('users AS m')
    ->join('listings AS l', 'm.user_id = l.member_id', 'left')
    ->join('groups AS g', 'm.group_id = g.group_id', 'left')
    ->group_by('m.user_id');

如果我想这样做,我该如何继续使用此查询:

if($query_total = $this->db->get()){

   $this->total_results = $query_total->num_rows();

}

$this->db->limit($limit, $offset);
if($query_members = $this->db->get()){

   return $query_members->result_array();
}

更新:换句话说,我想使用get()方法运行查询,而不是在查询构建器完成运行时将其清除,以便稍后我可以使用查询的顶部 .

2 回答

  • 1

    您可以使用Active Record Caching(该页面上的最后一个类别)来获取它 .

    $this->db->start_cache(); // start caching
    $this->db->select('m.user_id AS id, m.email_address, m.display_name, m.status, UNIX_TIMESTAMP(m.join_date) AS join_date,
            l.listing_id, COUNT(l.member_id) AS total_listings,
            g.group_id AS group_id, g.title AS group_title')
    ->from('users AS m')
    ->join('listings AS l', 'm.user_id = l.member_id', 'left')
    ->join('groups AS g', 'm.group_id = g.group_id', 'left')
    ->group_by('m.user_id');
    $this->db->stop_cache(); // stop caching
    

    然后,您可以根据需要使用该查询 .

    if($query_total = $this->db->get()){
    
       $this->total_results = $query_total->num_rows();
    
    }
    
    $this->db->limit($limit, $offset);
    if($query_members = $this->db->get()){
    
       return $query_members->result_array();
    }
    

    当您不再需要缓存查询时,也可以刷新缓存 .

    $this->db->flush_cache();
    

    希望它对你有用 .

  • 0

    您没有在$ this-> db-> get()函数中传递任何表名 . 谢谢

相关问题