2010-06-25 2 views
4

Является ли эта плохая практика, и нужно ли снимать для этого кода?Вместо соединения таблиц, слияние объектов: Является ли эта плохая практика?

function get_business_addresses($business_id) { 

    $query = $this->db->get_where('contact_business_addr_rel', array('business_id'=> $business_id)); 

    if ($query->num_rows() > 0) { 
     foreach ($query->result() as $row) { 
      $address_id = $row->address_id; 
      $address_type_id = $row->address_type_id; 
      $this->db->select('type'); 
      $q = $this->db->get_where('contact_business_address_type',array('id'=> $address_type_id)); 

      $query = $this->db->get_where('contact_business_addresses',array('id'=> $address_id)); 

      if ($query->num_rows() > 0) { 
       foreach ($query->result() as $row) { 

        $row2 = $q->row(); 
        $obj_merged = (object) array_merge((array) $row, (array) $row2); 
        $data[] = $obj_merged; 
       } 

      } 
     } 
    } 
    return $data; 
} 
+0

Позже я переработал этот код с помощью соединения sql. Это было не так плохо. Примерно на 7 строк меньше кода. –

ответ

6

Возможно. Я не могу сказать наверняка, но похоже, что он должен быть значительно медленнее, чем просто использовать JOIN.

Я бы сказал, что это точно, но эмпирическое правило, которое я прохожу, - «если это можно сделать чисто в SQL, механизм БД, возможно, сделает это лучше, чем я могу».

1

Короче говоря, да, это плохо. Для нескольких строк (например, 10) это не имеет большого значения. Однако, как только ваша таблица имеет 10 000 рядов, это означает, что сначала нужно получить 10 000 строк, затем прокрутить каждую строку и объединить все вещи. Простой JOIN в этом случае будет намного быстрее.

Смежные вопросы