Chodzi o uzyskanie tablicy jak poniższa: potrzebuję mieć w niej kategorie i podłączone do nich wybrane podkategorie (wybierane one są z tabeli wg. potrzeb, tzn. nie są podłączone wszystkie podkategorie tylko wybrane według potrzeb). Z jednej strony mój pomysł opiera się właśnie na zapytaniu w pętli - a drugi to łączenie dwóch tablic po key'u. Wydaje mi się, że pomysł z zapytaniem w pętli jest lepszy, aczkolwiek na tzw. "czuja" nie podoba mi się samo hasło "zapytania w pętli".
Bardzo proszę kogoś o dokładną analizę kodu - borykam się z tym problemem od jakiegoś czasu i do tej pory nie udało mi się uzyskać satysfakcjonującej odpowiedzi.
Generalnie nie chodzi tutaj o funkcję kategorie / podkategorie - to dałem tylko dla przykładu. W rzeczywistości każda gałąź [sub] -> ma mieć jeszcze [data] -> a potem duże [items].
( ( [cat] => stdClass Object ( [code_finish_cat] => 1 [cat_name] => Kategoria A ) ( [0] => stdClass Object ( [code_finish_cat] => 1 [subcat_name] => Podkategoria 1 ) [1] => stdClass Object ( [code_finish_cat] => 2 [subcat_name] => Podkategoria 2 ) ) ) ( [cat] => stdClass Object ( [code_finish_cat] => 2 [cat_name] => Kategoria B ) ( [0] => stdClass Object ( [code_finish_cat] => 2 [subcat_name] => Podkategoria 1 ) [1] => stdClass Object ( [code_finish_cat] => 2 [subcat_name] => Podkategoria 2 ) [2] => stdClass Object ( [code_finish_cat] => 2 [subcat_name] => Podkategoria 3 ) ) ) )
Powyższa tablica uzyskana z zapytania:
/* GET PRODUCTS MAIN DATA */ $this->db->where('main.products_id', 1); $this->db->select(' main.products_id, main.products_name ',false); $query = $this->db->get('test_products main'); $A = $query->row(); /* GET CATEGORIES MAIN DATA */ $this->db->where('main.code_products', $A->products_id); $this->db->select(' main.code_finish_cat, t1.cat_name ',false); $this->db->join('test_base_finish_cat t1', 't1.cat_id = main.code_finish_cat', 'left'); $this->db->group_by('code_finish_cat'); $query = $this->db->get('test_products_categories main'); $B = $query->result(); foreach($B as $key => $item){ $this->db->where('main.code_finish_cat', $item->code_finish_cat); $this->db->select(' main.code_finish_cat, t1.subcat_name ',false); $this->db->join('test_base_finish_subcat t1', 't1.subcat_id = main.code_finish_subcat', 'left'); $this->db->group_by('code_finish_subcat'); $query = $this->db->get('test_products_categories main'); $C = $query->result(); 'cat' => $item, 'sub' => $C ); }