【问题标题】:Return both query result and num rows返回查询结果和行数
【发布时间】:2016-03-07 23:04:49
【问题描述】:

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

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

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

这样返回两个值不是很傻吗?

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

【问题讨论】:

  • 你可以统计结果。 $total = count($result);
  • 正确的方法是让 assoc 数组与您的数据一起返回 return ['result'=>$result, 'count'=>$count];
  • PostMans,看起来很聪明,但我不会再次调用函数(并再次执行脚本)吗?编辑:知道了 :-) 只需将 return 分配给某个变量并计算该变量。

标签: php mysql codeigniter mysql-num-rows


【解决方案1】:

你也可以使用你的函数:

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

那么当调用函数时:

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

【讨论】:

  • 在 php 端计算它不是一个好主意。如果您将有更多记录,则可能是非常缓慢的解决方案。脚本首先将获取所有记录,然后将其计入慢速 php 函数中。最好使用 2 个 SQL 查询。
  • 非常不正确的@Kamil。 php 的 count() 是 O(1) 它——计算一个巨大的数组并不需要比计算一个单元素数组更多的努力。请删除您的评论,以免误导研究人员。 stackoverflow.com/q/4566314/2943403 , stackoverflow.com/q/5835241/2943403
【解决方案2】:

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

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

}

【讨论】:

    【解决方案3】:

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

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

    也许对你有帮助。

    【讨论】:

      【解决方案4】:

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

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

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

      如果您只需要结果集而不需要计数,那么很好,您的模型方法没有被过度设计以返回将不被使用的值。

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

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

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

      【讨论】:

        猜你喜欢
        • 2013-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多