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 一个数组类型的值。它要么是一个空数组,要么是一个对象数组。持续的。瘦且健康的。干净的。可重复使用。
我正在使用 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 一个数组类型的值。它要么是一个空数组,要么是一个对象数组。持续的。瘦且健康的。干净的。可重复使用。