Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Frederick Moschkowich

[Resolvido] buscar categorias e subcategorias

Recommended Posts

Olá pessoal,

 

tenho a seguinte tabela no MySql:

 

+-----------+------------------------+----------+---------+--------------+

|categ_cod | categ_nome |categ_sub |categ_pai| categ_filho |

|1 | Fantasias Femininas | N | 0 | N |

|2 | Fantasias Masculinas | N | 0 | N |

|3 | Linha Sensual | N | 0 | Y |

|4 | Camisola | Y | 3 | N |

|5 | Tangas Sensuais | N | 0 | N |

|6 | Espartilho | Y | 3 | N |

|7 | Cuecas Masculinas | N | 0 | N |

|8 | Conjuntos | Y | 3 | N |

+-----------+------------------------+----------+---------+--------------+

 

e o seguinte código para pegar as categorias e subcategorias:

 

$conecta = new BancoDeDados;
if($conecta ->conectar("$db_host","$db_user","$db_senha","$db_bd")) {

$k_store_categ = $conecta ->seleciona_tab('fm_products_category');  // Aqui funciona da seguinte forma seleciona_tab($tabela, $condicoes, $ordem)

if ($k_store_categ) { /// iniscio do if se conexao bem sucedida com algum registro

	$k_nr_users = $conecta -> conta_registros(); // conta o numero de registos encontrados

	echo "Encontradas $k_nr_users categorias";
	echo "<ul>";

		while ($linha = $conecta -> imprime_registro()) {  // comeca a extrair os registros

					extract($linha);

					if($categ_sub == "N") {
						echo "<li>$categ_cod - $categ_nome - $categ_pai - $categ_sub - $categ_filho</li>";
					}

					else{
						echo "<ul>";

						$conecta2 = new BancoDeDados;
						$k_store_categ2 = $conecta2 ->seleciona_tab('fm_products_category',"categ_pai=$categ_aux AND categ_sub='Y'");

						while ($linha2 = $conecta2 -> imprime_registro()) {  // comeca a extrair os registros
							extract($linha2);
							echo "<li>$categ_cod - $categ_nome - $categ_pai - $categ_sub - $categ_filho</li>";
						}
						echo "</ul>";
					}
		} // fim da extracao dos registros

	echo "</ul>";

} /// fim se encontrou registros

else echo "nenhum registro encontrado"; // se nao encontrou registros

} //// fim do if de conexao com o BD

else { /// else da conexao

echo "erro na conexao com o BD";

} /// fim do else da conexao


?>

 

o problema é que eu gostaria que aparecesse assim:

 

  • 1 - Fantasias Femininas - 0 - N - N
  • 2 - Fantasias Masculinas - 0 - N - N
  • 3 - Linha Sensual - 0 - N - Y

    o 4 - Camisola - 3 - Y - N

    o 6 - Espartilho - 3 - Y - N

    o 8 - Conjuntos - 3 - Y - N

  • 5 - Tangas Sensuais - 0 - N - N
  • 7 - Cuecas Masculinas - 0 - N - N

só que está aparecendo assim:

 

 

  • 1 - Fantasias Femininas - 0 - N - N
  • 2 - Fantasias Masculinas - 0 - N - N
  • 3 - Linha Sensual - 0 - N - Y

    o 4 - Camisola - 3 - Y - N

    o 6 - Espartilho - 3 - Y - N

    o 8 - Conjuntos - 3 - Y - N

  • 5 - Tangas Sensuais - 0 - N - N

    o 4 - Camisola - 3 - Y - N

    o 6 - Espartilho - 3 - Y - N

    o 8 - Conjuntos - 3 - Y - N

  • 7 - Cuecas Masculinas - 0 - N - N

    o 4 - Camisola - 3 - Y - N

    o 6 - Espartilho - 3 - Y - N

    o 8 - Conjuntos - 3 - Y - N

Alguma luz? Onde está o erro?

Abraços,

 

Frederick Moschkowich

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que vai ser muito complicado voce fazer o que quer, sem antes modelar corretamente o sistema.

Normalmente o conceito de subcategoria eh na verdade uma herança ou composiçao interpretado de forma errada.

Voce pode obter ajuda adequada visitando o forum de modelagem: http://forum.imasters.com.br/index.php?/forum/179-modelagem-sql/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu Marcio,

 

vou dar uma olhada com calma e ver se consigo resolver.

 

 

[]s

 

FM

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver. Segue o codigo para quem tiver duvida. Se alguem tem sugestao melhor, favor postar

 

$conecta = new BancoDeDados;
if($conecta ->conectar("$db_host","$db_user","$db_senha","$db_bd")) {

   $k_store_categ = $conecta ->seleciona_tab('fm_products_category');

   if ($k_store_categ) { /// iniscio do if se conexao bem sucedida com algum registro

       $k_nr_users = $conecta -> conta_registros(); // conta o numero de registos encontrados

       $i = 0;

           while ($linha = $conecta -> imprime_registro()) {  // comeca a extrair os registros

                       extract($linha);
                           $categs_name[$i]['name']=$categ_nome;
                           $categs_name[$i]['filho']=$categ_filho;
                           $categs_name[$i]['sub']=$categ_sub;
                           $categs_name[$i]['pai']=$categ_pai;
                           $categs_name[$i]['cod']=$categ_cod;
                           $i++;

           } // fim da extracao dos registros


       $nr_itens = count($categs_name); // conta itens do array

       echo "<ul>"; // imprime o inicio da lista

       for($j=0;$j<=$nr_itens;$j++) { // começa um loop para imprimir as categorias e sub-categorias

           if($categs_name[$j]['filho']=='N' && $categs_name[$j]['pai']==0) { // se nao tem filho nem pai
               echo "<li>".$categs_name[$j]['name']."</li>"; // imprime como item da lista
           }
           else { // senao, se tem filho,

               if($categs_name[$j]['filho']=='Y' && $categs_name[$j]['pai']==0) { // verifica se e categoria pai
                   echo "<li>".$categs_name[$j]['name']."</li>"; // imprime o nome da categoria pai
                   echo "<ul>";    // abre sub-lista para listar as filhas

                   for($k=0;$k<=$nr_itens;$k++) { // novo loop para imprimir as categorias filhas

                       if($categs_name[$k]['pai'] == $categs_name[$j]['cod']) { /// se a categoria filho estiver relacionada com a pai

                           echo "<li>".$categs_name[$k]['name']."</li>"; // imprime a categoria filha como item da nova lista

                       } // fim do if de comparacao com o codigo da pai
                   }
                   echo "</ul>"; // fecha a sub-lista com categorias filha
               } // fim do if se tem categoria filha
           } /// fim do else se tem filho

       }
       echo "</ul>"; /// fecha a lista das categorias

   } /// fim se encontrou registros

   else echo "nenhum registro encontrado"; // se nao encontrou registros

} //// fim do if de conexao com o BD

else { /// else da conexao

   echo "erro na conexao com o BD";

} /// fim do else da conexao

 

[]s

 

FM

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.