Cazzeri 1 Denunciar post Postado Agosto 18, 2014 Bom dia... digamos que existem duas tabelas, uma "Categorias" e outra "Itens", como seria a lógica para trazer os resultados dessa forma: Uma categoria ------------------ Somente os itens dessa categoria Outra categoria ------------------- Os itens dessa outra categoria Tentei fazer um select das categorias e o resultado levar como parâmetro do select que traria os itens... tentei colocar, o foreach dos itens dentro do foreach das categorias, já tentei fazer um join... mas acho que na verdade está me faltando um pouco de lógica... se alguém conseguir dar uma luz aqui. Valeu! Compartilhar este post Link para o post Compartilhar em outros sites
Massaki 47 Denunciar post Postado Agosto 18, 2014 Você entende JQuery? Vai precisar disso. Procure por "popular select" no google. Ou faça o formulário em 2 etapas: 1 - Selecione a categoria (se colocar o onchange="submit()" fica mais interessante) 2 - Após selecionar a categoria, busca os itens dela. Compartilhar este post Link para o post Compartilhar em outros sites
Cazzeri 1 Denunciar post Postado Agosto 18, 2014 Massaki... é que a ideia não é fazer uma busca, é já trazer na página inicial os itens agrupados por categoria. Compartilhar este post Link para o post Compartilhar em outros sites
Massaki 47 Denunciar post Postado Agosto 18, 2014 Entendi. Então coloque os itens da categoria em uma array. Ex: $categorias = array ( 0 => array ( 'nome' => 'Nome da categoria', 'itens' => array ( '0'=>'item 1', '1'=>'item 2', '2'=>'item3') ), 1 => array ( 'nome' => 'Outra categoria', 'itens' => array ( '0'=>'primeiro', '1'=>'segundo', '3'=>'terceiro') ), ); Então, quando for mostrar os dados, use um foreach para as categorias, e dentro das categorias, outro foreach para os itens foreach ($categorias as $cat) { echo $cat['nome'] . '<br />'; foreach ($cat['itens'] as $it) { echo '- ' . $it . '<br />'; } echo '-------------<br />'; } Compartilhar este post Link para o post Compartilhar em outros sites
Cazzeri 1 Denunciar post Postado Agosto 18, 2014 Massaki, a parte de exibição era bem o que eu estava tentando fazer, até quase deu certo, o problema é o foreach dos itens... Confesso que não entendi a sua variável $categorias, em um array ele me traz a categoria e dentro desse array um outro array que traria os itens? Só que tanto a categoria e os itens, vem de um BD. A tabela "categorias" pode existir por exemplo: esporte | tecnologia e nos itens, ter 2 itens com a categoria esporte e 2 com a de tecnologia. Só que elas não se relacionam. Compartilhar este post Link para o post Compartilhar em outros sites
Massaki 47 Denunciar post Postado Agosto 18, 2014 Isso. Dentro de cada categoria, existe uma outra array de itens. Faz mais ou menos o seguinte: $sql = "SELECT * FROM categorias"; $query = mysql_query($sql); while ($dados = mysql_fetch_array($query)) { $id_categoria = $dados['id']; $nome_categoria = $dados['nome']; $categorias[$id_categoria]['nome'] = $nome_categoria; $sql2 = "SELECT * FROM itens WHERE categoria = '$id_categoria'"; $query2 = mysql_query($sql2); while ($dados2 = mysql_fetch_array($query2)) { $cod_item = $query2['id']; $itens[$cod_item] = $query2['nome_item']; } $categorias[$id_categoria]['itens'] = $itens; unset($itens); } var_dump($categorias); É claro que você tem que fazer alguns ajustes, para o caso de não ter nenhum item na categoria. Mas o caminho é mais ou menos esse. Compartilhar este post Link para o post Compartilhar em outros sites
Cazzeri 1 Denunciar post Postado Agosto 18, 2014 Nossa, muito obrigado Massaki... ainda não passei essa sua ideia para o meu sistema, mas só de analisar o código, parece ser isso mesmo. Vou tentar "traduzir" esse código para o framework (CI). Compartilhar este post Link para o post Compartilhar em outros sites
Massaki 47 Denunciar post Postado Agosto 18, 2014 Se tiver dúvidas com CI, pode contar comigo. Já uso há 2 anos. Compartilhar este post Link para o post Compartilhar em outros sites
Cazzeri 1 Denunciar post Postado Agosto 18, 2014 Boaaa... bom, então deve saber o funcionamento da class parser?! Então... acredito que seja esse o caminho, mas não deu muito certo, na tabela Itens tenho 3 resultados: 2 Usados (Categoria) 1 Tecnologia (Categoria)... na tabela Categorias fiz com que as ids se relacionassem, então lá tbm tem 2 Usados e 1 Tecnologia com a mesma id dos itens, segue a função que levo na view, usando a sua ideia... public function itens_principais() { $loja = $this->load->database('loja', TRUE); $query = $loja->query("SELECT * FROM categorias"); foreach($query->result() as $row) { $id_item_cat = $row->id_item_cat; $query2 = $loja->query("SELECT * FROM itens WHERE id_item = '$id_item_cat'"); foreach($query2->result() as $row2) { $dados[] = array( 'id_item' => $row2->id_item, 'categoria' => $row2->categoria, 'nome' => $row2->nome, 'valor' => $row2->valor, 'imagem' => $row2->imagem ); } return $dados; } } E mais ou menos assim, seria a minha view: {itens_principais} <h4>{categoria}</h4> <p>{nome} - {valor}</p> <img src="assets/img/{imagem}"> {/itens_principais} Só que ele está me retornando somente uma linha... no caso o item de categoria tecnologia, parece que ele não está fazendo o loop, não sei se tem diferença usar o while ou o foreach oO Compartilhar este post Link para o post Compartilhar em outros sites
Massaki 47 Denunciar post Postado Agosto 18, 2014 Por quê colocar o nome da categoria em cada item? Não deveria estar invertido, assim: {categoria} <h4>{nome_categoria}</h4> {itens_principais} <p>{nome} - {valor}</p> <img src="assets/img/{imagem}"> {/itens_principais} {/categoria} Compartilhar este post Link para o post Compartilhar em outros sites
Cazzeri 1 Denunciar post Postado Agosto 18, 2014 Mas e de onde saiu esse {categoria} {/categoria} ? Compartilhar este post Link para o post Compartilhar em outros sites
Massaki 47 Denunciar post Postado Agosto 18, 2014 $categoria é a array principal. Estou considerando que na tabela 'categorias', o ID é 'id' e que é chave estrangeira para a tabela 'itens' em um campo chamado 'categoria': Crie 2 funções: public function categorias() { $loja = $this->load->database('loja', TRUE); $query = $loja->query("SELECT * FROM categorias"); foreach($query->result_array() as $row) { $idcat = $row['id']; $matriz[$idcat]['nome_categoria'] = $row['nome']; $matriz[$idcat]['itens_principais'] = $this->itens_categoria($idcat); } return $matriz; } public function itens_categoria($idcat) { $loja = $this->load->database('loja', TRUE); $query2 = $loja->query("SELECT * FROM itens WHERE id_item = '$idcat'"); return $query2->result_array(); } Compartilhar este post Link para o post Compartilhar em outros sites
Cazzeri 1 Denunciar post Postado Agosto 18, 2014 Isso aí Massaki... bem certinho, estava desde sexta-feira tentando isso... uma gurizada lá no google+ tentando me ajudar também, mas sem resultados. Sinceramente não sabia que dava para fazer isso, $matriz[$categoria]['itens_principais'] = $this->itens_categoria($categoria); sinceramente não entendi essa linha Valeu mesmo :D Compartilhar este post Link para o post Compartilhar em outros sites