我使用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,因为我已经运行了一个。有没有其他有效的方法可以从一个查询执行中获取计数?
答案 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()
方法将无条件返回数组类型的值。它可以是一个空数组或对象数组。一致。靠。清洁。可重复使用。