【问题标题】:Can I run a CodeIgniter database query without clearing it from the class?我可以在不从类中清除它的情况下运行 CodeIgniter 数据库查询吗?
【发布时间】:2016-01-22 04:19:50
【问题描述】:

我正在使用 CodeIgniter 数据库类来生成结果,然后使用分页类来导航它们。我有一个从表中检索成员结果的模型。我想计算查询的总行数,以便将其传递给分页类。 count_all db 辅助函数是不够的,因为它没有考虑到我包含的任何“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() 方法运行查询,而不是在完成运行后从查询构建器中清除它,以便以后可以使用查询的顶部。

【问题讨论】:

  • 您面临什么问题?

标签: codeigniter


【解决方案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();

希望对你有用。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 他已经设置了$this->db->from('users AS m');,所以不需要在get()方法中再次传递表名。
    猜你喜欢
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    • 2016-05-07
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多