Mam pytanie - czy w takim przypadku można zastosować zapytanie w pętli? Ewentualnie jakie jest inne rozwiązanie tego problemu?
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
);
}
Ten post edytował dizor 17.09.2009, 13:43:52