Return 查询结果和 num 行

Return both query result and num rows

我正在使用 MySQL 和 PHP 在 MVC CodeIgniter 中工作。 常见情况——我从数据库中获取数据,我想对它们进行计数。我想知道我怎样才能以最优化的方式做到这一点。在 one 函数中这样做是否明智?

我将与您分享我的解决方案,请告诉我这是一个好方法。假设我们有一个模型函数:

public function get_results()
{
   $query = $this->db->get('data');
   $result = $query->result();
   $count = $query->num_rows();
   return [$result, $count];
}

这样问 return 这两个值不是很愚蠢吗?

我想避免创建新函数 num_result() 执行另一个 SQL 只计算行数,因为我已经 运行 一个.有没有其他有效的方法来计算一次查询执行?

return 模型中的查询对象 //型号

public function get_results()
{
   return $this->db->get('data');

}

//控制器

public function index(){
    $obj = $this->mymodel->get_results();
    $obj->num_rows(); //Count result
    $obj->result();   // rows object
    $obj->result_aray(); //rows array

}

您可以通过以下方式完成:-

public function get_results()
{
   $query = $this->db->get('data');
   $data['result'] = $query->result();
   $data['count'] = $query->num_rows();
   return $data;
}

可能对你有帮助。

你也可以使用你的函数:

public function get_results()
{
   $query = $this->db->get('data');
   $result = $query->result();
   return $result
}

然后当调用函数时:

$result= $this->your_model->get_results();
$count = count($result);

由于 PHP 的 count() 是 O(1),我看不出存储计数或在 MVC 设计的层之间传递它有任何好处。

  • PHP: What is the complexity [i.e O(1),O(n)] of the function 'count'?
  • Is PHP's count() function O(1) or O(n) for arrays?

如果您需要控制器或视图中的结果集数据和结果集中的行数,只需在相应层中调用 count()

如果您只需要计数,那么您的模型方法(查询)应该使用以 SELECT COUNT(1)SELECT COUNT(*).

开头的内容

如果您只需要结果集而不需要计数,那就太好了,您的模型方法没有被过度设计为 return 将不会被使用的值。

实际上,您的模型可以这么简单:

public function get_results(): array
{
   return $this->db->get('data')->result();
}

Codeigniter 的result() 方法将无条件地return 一个数组类型的值。它要么是一个空数组,要么是一个对象数组。持续的。瘦且健康的。干净的。可重复使用。