Ir para conteúdo
Fórum Script Brasil
  • 0

Como gerar categorias e subcategorias?


marvi

Pergunta

Pessoal, não sei mais o que fazer...

Tenho uma tabela categoria e que possui também subcategorias que referencia a ela mesma... pois assim ela é dinâmica e a pessoa insere quantas subcategorias da subcategorias quiser... entende?

Veja a tabela em Access XP:

id.jpg

Mas eu quero ao cadastrar o produto mostrar um combo ou uma lista para marcar onde a pessoa quer cadastrar esse produto, se é em uma determinada subcategoria listada, por exemplo, como faço? Pois quero que mostre:

Categoria A - Sub Categoria A - Subcategoria da subcategoria A...

Categoria B - Sub Categoria B - Subcategoria da subcategoria B e etc.

Tente isso mas acho que não vai, pois aí solicita dois campos para os nomes da tabela:

Code Snippet<%
conta = 0
While Not rsAr.EOF

sArtista = rsAr("nome")
sCd = rsAr("nomecd")
conta = conta +1

If conta = 1 Then
Response.Write("Artista: "& sArtista &"<br>")
End If
Response.Write("CD: " & sCd)
response.write "<br><br>"

rsAr.MoveNext

If Not rsAr.EOF Then
If rsAr("nomeartista") <> sArtista Then
conta = 0
End If
End If

Wend
%>

E agora? Como listar algo? Existe alguma lógica para isso? Já tente varias vezes, mas esse código acima, de outra programação, foi o que chegou mais perto... Mas ele conta um campo nome e depois conta outros campos e no meu caso tem que contar um campo só e saber quando é subcategoria de quem... entende?

Não sei o que fazer...

Obrigado mesmo!

Marcelo

Link para o comentário
Compartilhar em outros sites

21 respostass a esta questão

Posts Recomendados

  • 0

uhm, deixa eu ver se entendi... você quer que depois de selecionar determinada opção no "list/menu1" apareça no "list/menu2" as opções que estão relacionadas com o "list/menu1"? é isso?

tipo escolhe a opção a no list/menu1 daí no list/menu2 aparecem as opções: a1, a2, a3, a4...

Confirma isso pra mim, ok?

[]'s Rafael Spilki

Link para o comentário
Compartilhar em outros sites

  • 0

é, você escolhe uma categoria e ele gera a subcategoria dela correspondente, depois escolhe as subcategorias que poderá ou não gerar outras subcategorias, dependendo se a pessoa na hora de cadastrar, cadastrou mais subcategorias... aí ele escolhe até termienar e insere o produto.

Tipo:

Ele pode cadastrar subcategorias da subcategorias varias vezes... não tem um "limite" vamos dizer assim...

Categoria A -> Categoria AA -> Categoria AAA. Nesse exemplo a pessoa verá que categoria AAA é da categoria AA e assim vai...

Quero que mostre as categorias e subcategorias correspondentes para que o cliente marque a opção que quer, entende?

Editado por marvi
Link para o comentário
Compartilhar em outros sites

  • 0

Eu tava pensando em fazer um combo dinâmico, alguém sabe como? O que tentei aqui é dinâmico mas os combos são pre-definido. Queria algo em AJAX, não sei, que os combos fossem surgindo de acordo com o conteudo do banco e a referência com outro combo... Tem?

Link para o comentário
Compartilhar em outros sites

  • 0

vo te da um exemplo de sql.... com no maximo 2 sub categorias...

basicamente algo assim

sql="select * from tabela where subcategoria="" order by categoria"
set rs=conn.execute(sql) if not rs.eof then while not rs.eof then
sql="select * from tabela where subcategoria="&rs("categoria")
set rs1=conn.execute(sql) if not rs1.eof then while not rs1.eof then
sql="select * from tabela where subcategoria="&rs1("categoria")

set rs11=conn.execute(sql)

if not rs11.eof then

while not rs11.eof then

rs11.movenext

wend

end if

rs11.close

set rs11=nothing

rs1.movenext

wend

end if

rs1.close

set rs1=nothing

rs.movenext

wend

end if

rs.close

set rs=nothing

Link para o comentário
Compartilhar em outros sites

  • 0

Marcelo, bom dia...

Cheque os seus whiles, deve estar acontecendo alguma coisa por ali... lembre-se que cada while vai fazer com que uma ação percorra os registros do bd até que esta ação esteja "satisfeita" ok? este erro q você postou é bastante característico deste procedimento.

[]'s Rafael Spilki

Link para o comentário
Compartilhar em outros sites

  • 0

Olá, não sei mas como fazer... cheguei até aqui mas... não vejo problema na lógica... Acho que é meu banco, como viu, ele referencia a ela mesma... já que o usuário precisa criar várias subcategorias que precisar e assim não posso limitá-lo com quantidades fixas de tabelas de subs...

call abre_conexao
sqlcat = "select id_categoria, nome from categorias order by nome desc"
set rsP = conexao.execute(sqlcat)

do while not rsP.eof
response.write("Categoria: "& rsP("nome"))
response.write"<br><br>"
   
    sqlcat1 = "select id_categoria, nome from categorias where id_Categoriapai = "&rsP("id_Categoria")&""
    set rsF = conexao.execute(sqlcat1)
    
    do while not rsF.eof
    
        response.write("Subcategorias: "& rsF("nome"))
        response.write"<br><br>"
        
       sqlcat2=" select id_categoria, nome from categorias where id_Categoriapai = "&rsF("id_Categoria")&""
            set rsN = conexao.execute(sqlcat1)
            
        do while not rsN.eof
        
            response.write("Subcategorias: "& rsN("nome"))
            response.write"<br><br>"
        rsN.movenext()
                    loop
    rsF.movenext()
                loop
rsP.movenext()
            loop%>

Será que consegue ver algo aí?

Link para o comentário
Compartilhar em outros sites

  • 0

Marcelo, boa tarde.

O que eu vi é o seguinte:

você tem dois select dentro de um loop, de fato, um desses selects está dentro de dois loops...

Talvés você devesse começar esse codigo com os select fora dos loops e ir ajeitando do começo... vendo o que acontece quando você posiciona determinado select dentro de determinado loop, sacou?

mas... pelo que você especificou eu tentaria da forma abaixo, que pelo que eu vi deve resolver seu problema... mas caso não resolva, faça isso que eu mencionei acima, ok?

call abre_conexao
sqlcat = "select id_categoria, nome from categorias order by nome desc"
set rsP = conexao.execute(sqlcat)

do while not rsP.eof
response.write("Categoria: "& rsP("nome"))
response.write"<br><br>"
  
    sqlcat1 = "select id_categoria, nome from categorias where id_Categoriapai = "&rsP("id_Categoria")&""
    set rsF = conexao.execute(sqlcat1)
    
    
    
        response.write("Subcategorias: "& rsF("nome"))
        response.write"<br><br>"
        
       sqlcat2=" select id_categoria, nome from categorias where id_Categoriapai = "&rsF("id_Categoria")&""
            set rsN = conexao.execute(sqlcat1)
            
       
        
            response.write("Subcategorias: "& rsN("nome"))
            response.write"<br><br>"

rsP.movenext()
            loop%>

Não esqueça de postar aqui os resutlado, ok? E fica a vontade para voltar com outras dúvidas!

[]'s Rafael Spilki

Link para o comentário
Compartilhar em outros sites

  • 0

FIz assim:

call abre_conexao

sqlcat = "select id_categoria, nome from categorias order by nome asc"
set rsP = conexao.execute(sqlcat)


     sqlcat1 = "select id_categoria, nome from categorias where id_Categoriapai = "&rsP("id_Categoria")&""
    set rsF = conexao.execute(sqlcat1)


do while not rsP.eof
response.write("Categoria: "& rsP("nome"))
response.write"<br><br>"
  
   
    
    do while not rsF.eof
    
        response.write(" &nbsp;&nbsp;&nbsp;∟>> Subcategorias: "& rsF("nome"))
        response.write"<br><br>"
        
           sqlcat2=" select id_categoria, nome from categorias where id_Categoriapai = "&rsF("id_Categoria")&""
            set rsN = conexao.execute(sqlcat1)
            
        do while not rsN.eof
        
            response.write(" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;∟>>> Subcategorias: "& rsN("nome"))
            response.write"<br><br>"
        rsN.movenext()
                    loop
    rsF.movenext()
                loop
rsP.movenext()
            loop
E saiu assim: Categoria: Fraldas ∟>> Subcategorias: oi ∟>>> Subcategorias: oi Categoria: Fraldinhas Categoria: oi Categoria: oi1 Categoria: ola Categoria: ola1 ------------------------------ Depois fiz isso :
<%
call abre_conexao

sqlcat = "select id_categoria, nome from categorias order by nome asc"
set rsP = conexao.execute(sqlcat)


     sqlcat1 = "select id_categoria, nome from categorias where id_Categoriapai = "&rsP("id_Categoria")&""
    set rsF = conexao.execute(sqlcat1)


            
do while not rsP.eof
response.write("Categoria: "& rsP("nome"))
response.write"<br><br>"
  

    
    do while not rsF.eof
        sqlcat2=" select id_categoria, nome from categorias where id_Categoriapai = "&rsF("id_Categoria")&""
            set rsN = conexao.execute(sqlcat1)
    
        response.write(" &nbsp;&nbsp;&nbsp;∟>> Subcategorias: "& rsF("nome"))
        response.write"<br><br>"
        
          
            
        
                    
    rsF.movenext()
                loop
rsP.movenext()
            loop
%>

Pelo visto esse é o que chegou mais proximo, mas não deu, ficou assim:

Categoria: Fraldas

∟>> Subcategorias: oi

Categoria: Fraldinhas

Categoria: oi

Categoria: oi1

Categoria: ola

Categoria: ola1

Obs: eu tava também tentando fazer um combo dinâmico com AJAX, pois acho que isso resolveria também... mas meu combo gera normal com os combos definidos, precisaria que os combos não fossem definidos e sim gerando automaticamente de acordo que tinha no banco, sem limites

Editado por marvi
Link para o comentário
Compartilhar em outros sites

  • 0

uhm... rateei aqui uma coisinha... da forma abaixo não deverá ocorrer esse erro... veja como fica... compare os codigos e compare as diferenças entre um e outro... desta forma poderá traçar parâmtros ate acertar sua app...

call abre_conexao
sqlcat = "select id_categoria, nome from categorias order by nome desc"
set rsP = conexao.execute(sqlcat)

sqlcat1 = "select id_categoria, nome from categorias where id_Categoriapai = "&rsP("id_Categoria")&""
set rsF = conexao.execute(sqlcat1)

sqlcat2=" select id_categoria, nome from categorias where id_Categoriapai = "&rsF("id_Categoria")&""
set rsN = conexao.execute(sqlcat1)

do while not rsP.eof
response.write("Categoria: "& rsP("nome"))
response.write"<br><br>"

do while not rsF.eof
    
response.write("Subcategorias: "& rsF("nome"))
response.write"<br><br>"
        
       

do while not rsN.eof
        
response.write("Subcategorias: "& rsN("nome"))
response.write"<br><br>"
rsN.movenext()
loop
rsF.movenext()
loop
rsP.movenext()
loop%>

[]'s Rafael Spilki

Link para o comentário
Compartilhar em outros sites

  • 0

Assim acho que não, deu erro:

0x80020009)

Exceção.

/afeirita/teste/index.asp, line 19

sqlcat2=" select id_categoria, nome from categorias where id_Categoriapai = "&rsF("id_Categoria")&""

Só roda se tiver dentro do loop e as formas que fiz postei logo acima...

Tive pensando em combo em Ajax...

Link para o comentário
Compartilhar em outros sites

  • 0

Certamente existem outros caminhos... entendo que com ajax da pra fazer coisas bem legais nesse sentido aí... lá na sala de ajax tem inclusive um tópico pendurado da andreia que é muito bom!

Quanto ao erro que deu, é que eu não tinha visto... mas está usando objetos recordsets de outras querys para fazer determinados selects... nesse caso eles tem que estar dentro dos loops... se não realmente não funciona... foi mal... mas na pressa me passei!

Terias que derepente reestudar aí a logica do seu sistema... além de ajax tb é possível o fazer funcionar por aqui... o caminho é esse mesmo...

Eu não entendi ainda muito bem a sua logica... talvés se você comentasse o codigo com as suas pretensões eu pudesse lhe ajudar mais, ok?

[]'s Rafael Spilki

Link para o comentário
Compartilhar em outros sites

  • 0

Certo, veja o que fiz com o banco:

id.jpg

Vou dar o exemplo para entender. Mas, primeiro eu fiz isso para que a pessoa em um painel de controle do site possa criar categorias e subcategorias sem limites, sem está limitado pelas tabelas... pois se existisse só categorias e subcategorias, com uma tabela chamada categorias e outra chamada subcategorias resolveria. Mas, se a pessoa no momento precisar criar 3 categorias? Ou seja, categoria A, subcategoria A e a subcategoria da subcategoria A, entende? Aí não tem como ser feito com as tebalas já prontas.

O que fiz: Fiz uma tabela que referencia a si mesma. Veja o exemplo: Temos o campo nome com as categorias e subcategorias tudo junto. Lá temos o nome Fraldas e que no seu campo id_categoriapai (que fica na frente dele) está vazio, mas por que vazio? Porque ele é a categoria principal e assim não é subcategoria de ninguém.

Temos agora o nome Oi e que no seu campo id_categoriapai tem um número que é o numero 24 e isso indica que ele é subcategoria de Fraldas porque o id_categoria de Fraldas é 24, ok?

Temos agora o nome Oi1 e que no seu campo id_categoriapai tem o número 28 e isso indica que ele é subcategoria de Oi, que está logo acima, pois esse Oi tem o numero 28 no seu id_categoria. Ou seja: o Oi1 é subcategoria da subcategoria Oi e que por sua vez é subcategoria da categoria Fraldas.

E assim vai, entendeu?

Assim eu quero exibir um relatório para que o usuário escolha a categoria que quer para cadastrar o produto. Nesse caso, a pessoa iria cadastrar o produto em Oi1 que é a ultima subcategoria e assim ela se cadastra nesta ultima.

Mas como exibir isso? Mostrando Fraldas -> Oi -> Oi1 (aqui coloca o produto)

Entendeu? Obrigado mesmo pela ajuda!

Editado por marvi
Link para o comentário
Compartilhar em outros sites

  • 0

Marcelo, bom dia!

Andei lendo com calma aqui... e tipo, sugiro mesmo ajax pra você.. acho que é bem mais jogo... até porque o que você quer é algo dinamico mas ao mesmo tempo pré-definido... do tipo se escolher no list/menu1 o item 'a' terá que abrir o list/menu2 com as categorias relacionadas a primeira opção e assim por diante...

Penso que é mais jogo com ajax...

Vi q você já andou postando algo por lá, se não sugeriria mover este tópico para lá... mas agora é aguardar novas respostas, ok?

[]'s Rafael Spilki

Link para o comentário
Compartilhar em outros sites

  • 0

Bareta,

Como não vai mudar?

Eu fiz os teste com combos fixos e ele através de ID vai chamando outro ID correspondente e exibindo no combo abaixo em uma seqüência tranqüila, isso sei que faz... mas o problema é se eu criei até 3 combos fixos esperando esses IDs seqüenciais e o usuário criou lá no painel 5 IDs, como continuar uma seqüência dinâmica dos IDS? Como fazer os combos virarem 5 combos? Já que são 5 IDS correspondentes no banco? Aí que entra o combo dinâmico em AJAX, por exemplo e assim vai de acordo com o conteúdo. Tendo conteúdo vai gerando a seqüência...

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,2k
×
×
  • Criar Novo...