2010-06-25 3 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 join으로 재개발했습니다. 그것은 그렇게 나빴다. 약 7 줄 적은 코드. –

답변

6

아마도. 확실히 말할 수는 없지만 JOIN을 사용하는 것보다 훨씬 느려야합니다.

내가 벤치마킹한다고 말하지만 엄지 손가락의 규칙은 "SQL에서 깔끔하게 처리 할 수 ​​있다면 DB 엔진이 내가 할 수있는 것보다 더 잘 할 수있다"는 것입니다.

1

간단히 말해서, 이것은 좋지 않습니다. 몇 줄 (예 : 10)의 경우에는 차이가별로 없습니다. 그러나 테이블에 10 000 개의 행이 생기 자마자 처음에는 10,000 개의 행을 가져와야하고 각 행을 반복하여 모든 항목을 병합해야합니다. 이 경우 단순한 JOIN이 일 정도로 많이입니다.

관련 문제