PhP(Codeigniter)在foreach循环之前合并查询结果

时间:2015-09-12 03:58:19

标签: php mysql codeigniter merge querying

我想知道是否可以从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循环中比两个更容易的条件。

3 个答案:

答案 0 :(得分:0)

经过一番阅读后,我想出了以下内容并且有效!

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

答案 1 :(得分:0)

您可以使用如下

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

希望这会对你有帮助!

答案 2 :(得分:0)

您必须始终$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...
}