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

时间:2016-01-22 04:19:50

标签: codeigniter

我使用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 个答案:

答案 0 :(得分: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();

希望它对你有用。

答案 1 :(得分:0)

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