CodeIgniter 中 $query>num_rows() 和 $this->db->count_all_results() 之间的区别 & 推荐哪一个

Posted

技术标签:

【中文标题】CodeIgniter 中 $query>num_rows() 和 $this->db->count_all_results() 之间的区别 & 推荐哪一个【英文标题】:difference between $query>num_rows() and $this->db->count_all_results() in CodeIgniter & which one is recommended 【发布时间】:2011-10-25 14:27:33 【问题描述】:

在某个场景中,我需要知道查询将返回的记录集的计数,这在 codeigniter 中可以由 $query->num_rows()$this->db->count_all_results() 完成。哪个更好,这两者有什么区别?

【问题讨论】:

【参考方案1】:

使用num_rows(),您首先执行查询,然后您可以检查您获得了多少行。另一方面,count_all_results() 只提供查询将产生的行数,但不提供实际结果集。

// num rows example
$this->db->select('*');
$this->db->where('whatever');
$query = $this->db->get('table');
$num = $query->num_rows();
// here you can do something with $query

// count all example
$this->db->where('whatever');
$num = $this->db->count_all_results('table');
// here you only have $num, no $query

【讨论】:

对,我想我会使用count_all_results,我需要在分页中计数,非常感谢:) 如果从优化的角度来看,count_all_results 要好得多。【参考方案2】:

$this->db->count_all_results 是Active Record 查询的一部分(准备查询,只返回数字,而不是实际结果)。

$query->num_rows() 在resultset object 上执行(在从数据库返回结果之后)。

【讨论】:

所以对我来说使用if($this->db->count_all_results()>0//do stuff 似乎更好? 如果您只关心找到的结果数量,那么是的【参考方案3】:

我们也可以使用

return $this->db->count_all('table_name');  

$this->db->from('table_name');
return $this->db->count_all_result();

return $this->db->count_all_result('table_name');

$query = $this->db->query('select * from tab');  
return $query->num_rows();

【讨论】:

【参考方案4】:

Which one is better and what is the difference between these two 这对我来说几乎是不可能的,有人只想获取记录数而无需重新处理或执行涉及相同资源的另一个查询。此外,这两个函数使用的内存毕竟是相同的,因为使用count_all_result 你仍然在执行get(在 CI AR 术语中),所以我建议你使用另一个(或使用 count() 代替)这给了您可重用性的好处。

【讨论】:

【参考方案5】:

有两种方法可以计算查询将返回的记录总数。 先这个

$query = $this->db->query('select blah blah');  
return $query->num_rows();

这将返回查询带来的行数。

第二

return $this->db->count_all_results('select blah blah');

count_all_results 将需要再次运行查询。

【讨论】:

【参考方案6】:

结果总数

$this->db->count_all_results('table name');

【讨论】:

【参考方案7】:

如下所示;

$this->db->get('table_name')->num_rows();

这将获得行数/记录数。但是您也可以使用搜索参数;

$this->db->select('col1','col2')->where('col'=>'crieterion')->get('table_name')->num_rows();

但是,应该注意的是,如果按照以下方式应用,您将看到严重的错误;

$this->db->get('table_name')->result()->num_rows();

【讨论】:

【参考方案8】:
$sql = "select count(*) as row from login WHERE firstname = '" . $username . "' AND password = '" . $password . "'";
    $query = $this->db->query($sql);
    print_r($query);exit;
    if ($query->num_rows() == 1) 
    return true;
     else 
    return false;
    

【讨论】:

以上是关于CodeIgniter 中 $query>num_rows() 和 $this->db->count_all_results() 之间的区别 & 推荐哪一个的主要内容,如果未能解决你的问题,请参考以下文章

$this->db->query() 啥都不返回 CodeIgniter

Codeigniter:从单列中获取所有值作为数组

Query 数据库中的视图顺序和 codeigniter 中的视图顺序

Codeigniter MySQL a Join Query 与结果中的列名冲突

CodeIgniter 中 $query>num_rows() 和 $this->db->count_all_results() 之间的区别 & 推荐哪一个

交易过程中的Codeigniter异常,会发生什么?