【问题标题】:PhP (Codeigniter) Merging query results before foreach loopPhP(Codeigniter)在foreach循环之前合并查询结果
【发布时间】:2015-12-08 16:42:59
【问题描述】:

我想知道是否可以从 codeigniters 活动记录中合并如下的 sql 查询。

   //get assigned contacts    
      $this->db->select('*, CONCAT(first_name, " " ,last_name) AS name', FALSE);
      $this->db->from('customers_contacts');
      $this->db->join('customers_accounts', 'customers_accounts.contact_id = customers_contacts.contact_id');
      $this->db->like('CONCAT(first_name, " " ,last_name)', $q);
      $results1 = $this->db->get();
    //get non assigned contacts
      $this->db->select('*, CONCAT(first_name, " " ,last_name) AS name', FALSE);
      $this->db->from('customers_contacts');
      $this->db->like('CONCAT(first_name, " " ,last_name)', $q);
      $results2 = $this->db->get();

我尝试使用 $query = array_merge($results1, $results2); 但这不起作用,我相信因为 ->get() 正在返回一个对象数组。

所以我让它通过一个 foreach 循环来工作,然后合并结果数组。但我需要做一些条件,这些条件在一个 foreach 循环中比在两个循环中更容易。

【问题讨论】:

  • 对不起,我应该更清楚一点,因为两个查询都在同一个表上,只有一个与联结表连接,(已分配与未分配的联系人)在已分配的联系人中返回了额外的列。所以联合是行不通的。
  • 我认为你需要这个:stackoverflow.com/questions/4345554/…

标签: php mysql codeigniter merge querying


【解决方案1】:

经过一番阅读,我想出了以下内容,并且可以正常工作!

//first query here...
$results1 = $this->db->get()->result_array();
//second query here...
$results1 = $this->db->get()->result_array();
//then...
$query = array_merge($results1,$results2);

【讨论】:

    【解决方案2】:

    你可以像下面这样使用

    $arr_results1 = $this->db->get()->result_array();
    $arr_results2 = $this->db->get()->result_array();
    var_dump(array_merge($arr_results1,$arr_results2));
    

    希望对您有所帮助!

    【讨论】:

      【解决方案3】:

      您必须始终执行$results->result(); 才能获得$results = $this->db->get(); 之后的行数组。 注意: $results->result(); 是一个对象数组。

      例如

      # ...
      $results1 = $this->db->get();
      
      # ...
      $results2 = $this->db->get();
      
      $results = array();
      
      if ($results1->num_rows()) 
      {
          $results = array_merge($results, $results1->result());
      }
      
      if ($results2->num_rows())
      {
          $results = array_merge($results, $results2->result());
      }
      
      return $results;
      

      这将返回一个对象数组(行),然后您像往常一样遍历数据:

      foreach ($results as $row) 
      {
          echo $row->id;
          echo $row->column_name_1;
          # and so on...
      }
      

      【讨论】:

        猜你喜欢
        • 2014-01-08
        • 2021-07-24
        • 2015-07-23
        • 1970-01-01
        • 2014-05-14
        • 2013-05-06
        • 1970-01-01
        • 1970-01-01
        • 2023-03-31
        相关资源
        最近更新 更多