返回查询结果和num行

时间:2015-12-03 10:58:56

标签: php mysql codeigniter mysql-num-rows

我使用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()仅为计数行执行另一个SQL,因为我已经运行了一个。有没有其他有效的方法可以从一个查询执行中获取计数?

4 个答案:

答案 0 :(得分:1)

你也可以使用你的功能:

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

然后调用函数时:

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

答案 1 :(得分:0)

从模型中返回查询对象 //模型

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

}

答案 2 :(得分:0)

你可以这样做: -

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

它可能对你有帮助。

答案 3 :(得分:0)

由于PHP的count()是O(1),所以在存储计数或在MVC设计的各层之间传递计数没有任何好处。

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

如果仅需要计数,则您的模型方法(查询)应使用以SELECT COUNT(1)SELECT COUNT(*)开头的内容。

如果您只需要结果集而不需要计数,那就太好了,您的模型方法并未经过过度设计以返回将不使用的值。

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

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

Codeigniter的result()方法将无条件返回数组类型的值。它可以是一个空数组或对象数组。一致。靠。清洁。可重复使用。