codeigniter 返回查询结果和num行

vfwfrxfs  于 2022-12-06  发布在  其他
关注(0)|答案(4)|浏览(143)

我正在用MySQL和PHP编写MVC CodeIgniter。常见的情况是-我从数据库中获取数据,我想计算它们的数量。我想知道我如何才能以最优化的方式做到这一点。在一个函数中做这件事是否明智?
我将与您分享我的解决方案,请告诉我这是一个好的方法。假设我们有一个模型函数:

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

问题是这样返回两个值是不是很傻?
我想避免创建新的函数 num_result(),因为我已经运行了一个函数,所以只为count行执行另一个SQL。有没有其他有效的方法来从一个查询执行中获取计数?

nkoocmlb

nkoocmlb1#

您还可以使用以下函数:

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

则在调用函数时:

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

qacovj5a2#

从您的模型返回查询对象//Model

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

}
mi7gmzs6

mi7gmzs63#

你可以通过这些方式做到这一点:-

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

它可能会帮助你。

tktrz96b

tktrz96b4#

因为PHP的count()是O(1),所以我看不出存储计数或在MVC设计的层之间传递计数有什么好处。

如果您需要结果集数据以及控制器或视图中结果集中的行数,只需在相应的层中调用count()
如果您只需要计数,那么您的模型方法(查询)应该使用以SELECT COUNT(1)SELECT COUNT(*)开头的方法。
如果您只需要结果集而不需要计数,那就太好了,因为您的模型方法没有被过度设计以返回未使用的值。
实际上,您的模型可以如此简单:

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

Codeigniter的result()方法将无条件地返回一个数组类型的值。它将是一个空数组或一个对象数组。一致。精简。干净。可重用。

相关问题