PhP (Codeigniter) Объединение результатов запроса перед циклом foreach

Я хотел бы знать, возможно ли объединить запросы sql, подобные следующим, из активной записи codeigniters.

   //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, чем в двух.


person skribe    schedule 12.09.2015    source источник
comment
Извините, я должен был быть более ясным, потому что оба запроса находятся в одной таблице, только один из них соединен с соединительной таблицей (назначенные и неназначенные контакты), в назначенных контактах возвращаются дополнительные столбцы. Так что союз не сработает.   -  person skribe    schedule 12.09.2015
comment
Я думаю, вам нужно это: stackoverflow.com/ вопросы/4345554/   -  person Insane Skull    schedule 12.09.2015


Ответы (3)


После небольшого чтения я придумал следующее, и это работает!

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

Вы можете использовать, как показано ниже

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

Надеюсь, что это поможет вам!

person Kausha Mehta    schedule 12.09.2015

Вы должны всегда делать $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...
}
person Aravindan Ve    schedule 14.09.2015