Вместо объединения таблиц объединение объектов: это плохая практика? - PullRequest
4 голосов
/ 25 июня 2010

Это плохая практика, и я должен быть застрелен за то, что придумал этот код?

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;
}

Ответы [ 2 ]

6 голосов
/ 25 июня 2010

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

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

1 голос
/ 25 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...