Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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:
o 6 - Espartilho - 3 - Y - N
o 8 - Conjuntos - 3 - Y - N
só que está aparecendo assim:
o 6 - Espartilho - 3 - Y - N
o 8 - Conjuntos - 3 - Y - N
o 6 - Espartilho - 3 - Y - N
o 8 - Conjuntos - 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
Valeu Marcio,
vou dar uma olhada com calma e ver se consigo resolver.
[]s
FM
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
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/