Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá,
Eu tenho duas tabelas para montar um Menu Dinâmico através de um banco de dados MySQL. As tabelas são: "SESSOES" e "SUBSESSOES", elas estão relacionadas respectivamente pelos campos "id" e "cod_id" no intuito de montar um menu dinâmico em uma página ASP (produtos.asp).
A tabela "SESSOES" tem:
[id]..[sessao]
.1.....Menu 01
.2.....Menu 02
.3.....Menu 03
.4.....Menu 04
A tabela "SUBSESSOES" tem:
[id]..[cod_id]..[subsessao]
.1........1......Submenu 01
.2........1......Submenu 02
.3........1......Submenu 03
.4........2......Submenu 04
.5........2......Submenu 05
.6........2......Submenu 06
.7........3......Submenu 07
.8........3......Submenu 08
.9........3......Submenu 09
.10.......4......Submenu 10
.11.......4......Submenu 11
• O SELECT da busca no BD é: "SELECT * FROM sessoes INNER JOIN subsessoes ON (sessoes.id = subsessoes.cod_id)"
• O Recordset é "RSmenu"
• Dentro da página "produtos.asp" eu tenho um Repeat Region montando o Menu Dinâmico como se segue abaixo:
<%
Dim Repeat__numRows
Dim Repeat__index
Repeat__numRows = -1
Repeat__index = 0
RSmenu_numRows = RSmenu_numRows + Repeat__numRows
%>
<% While ((Repeat__numRows <> 0) AND (NOT RSmenu.EOF)) %>
<table>
<tr>
<td>
<b><%=(RSmenu.Fields.Item("sessao").Value)%></b>
</td>
</tr>
<tr>
<td>
<%=(RSmenu.Fields.Item("subsessao").Value)%>
</td>
</tr>
<tr>
<td>
<img src="images/linha.png"/>
</td>
</tr>
</table>
<% Repeat__index = RRepeat__index+1
Repeat__numRows = Repeat__numRows-1
RSmenu.MoveNext()
Wend
%>
Esse código acima está me retornando as informações colocando o nome da "sessao" correspondente a cada "subsessao" gerada, como se segue na imagem abaixo:
/applications/core/interface/imageproxy/imageproxy.php?img=http://www.hdwd.com.br/gif/menuERRO.gif&key=aeab884cb751d6723515b7014f0677154e8393cb03851cf51a4a63d81fb47c5c" alt="menuERRO.gif" />
Porém eu gostaria que o código me retornasse o nome da "sessao" e logo abaixo toda respectiva "subssessao". Ou seja, eu gostaria que o código me retornasse igualzinho a imagem que se segue abaixo:
/applications/core/interface/imageproxy/imageproxy.php?img=http://www.hdwd.com.br/gif/menuCERTO.gif&key=8db89bcb4a4cc9b2c21fdddbe49d485eb64a7af5b9869861a11833cb856bbf6b" alt="menuCERTO.gif" />
O quê preciso mudar para o Menu ficar assim?
Pois é Vinícius, eu já havia tentado o GROUP BY mas não deu certo. Mesmo assim agradeço a tentativa! O meu caso está mesmo na questão do loop ou repeat region, tanto que se eu fizer apenas um loop o Menu e os Submenus vêm listados corretamentes com uma linha de Sessão e abaixo as subsessões correspondentes. Mas quando vou gerar o loop da 2ª sessão em diante aí dá um retorno de listagem que não quero.
Vou ficar aguardando uma outra ajuda ou sugestão, mas valeu!
Tentou fazendo assim:
sql= "select * from sessao"
....
...
while not rs.eof
response.write rs("sessao")
sql2="select * from subsessao where codid ='"&rs("id")&"'"
...
response.write rs2("subsessao")
...
rs.movext
wend
A ideia seria mais ou menos essa, tenho algumas estruturas montadas assim, mas onde estou agora não tenho como postar um exemplo que esteja funcionando, mas caso precise, mais tarde posso postar.
Tentei montar conforme sua sugestão e não deu certo Vinícius. Mas eu pelo menos aproveitei a sua ideia de dois SQLs e então montei com dois RecordSets (RSmenu e RSsubmenu), sendo:
**RSmenu** com o select: "**SELECT * FROM sessoes**"
**RSsubmenu** com o select: "**SELECT * FROM subsessoes WHERE cod_id ='"&RSmenu("id")&"'**"
Sendo assim eu mudei a programação do Loop trabalhando com o Do While/Loop como se segue abaixo:
<%
Do While Not RSmenu.EOF
Response.Write "<tr><td>"
Response.Write "<b>"&RSmenu("sessao")&"</b>"
Response.Write "</td></tr>"
If Not RSsubmenu.EOF Then
Response.Write "<tr><td>"
Do While Not RSsubmenu.EOF
Response.Write "[+] "&RSsubmenu("subsessao")
Response.Write "<br>"
RSsubmenu.MoveNext
Loop
Response.Write "</td></tr>"
Response.Write "<tr><td><img src='linha.gif'/></td></tr>"
End If
RSmenu.MoveNext
LoopCom esse código aí quase deu certo, agora só precisamos fazer com que as "sessoes" que se seguem no Loop busquem suas respectivas "subssessoes". Na imagem abaixo dá pra você ter uma idéia de como ficou agora:
/applications/core/interface/imageproxy/imageproxy.php?img=http://www.hdwd.com.br/gif/menuLOOP.gif&key=c4a5a54f78dda866f9a0b97296d9de18c840c27de3a06aa41d425a6d9bf0c470" alt="menuLOOP.gif" />
Ou seja, a Sessão "Acessórios" está puxando suas respectivas Subsessões porém as Sessões "Musculação", "Cardiovascular" e "Esportes" não o estão fazendo. Porque será? O quê será que precisamos mudar no Loop para dar certo?
Acho que estamos quase lá!
Uhuuuul!!! Consegui Vinícius... quebrei um bocado a cabeça aqui mas consegui montar o Loop perfeito. O quê fiz dessa vez foi montar de acordo com a sua instrução inicial. Eu não estava colocando o SQL dentro do Loop... esse era o problema. E o pior de tudo é que você já havia me passado a dica da sintaxe correta, mas eu deixei passar.
Bom, agora o meu código com o Menu Dinâmico funcionando ficou assim:
1) Eu tenho um SQL (com outro nome) mas que SETa o RSmenu com o select: "SELECT * FROM sessoes"
2) Eu tenho o SQL que fica dentro do Loop e SETa o RSsubmenu com o select: "SELECT * FROM subsessoes WHERE cod_id ='"&RSmenu("id")&"'"
<%
Do While Not RSmenu.EOF
Response.Write "<tr><td>"
Response.Write "<b>"&RSmenu("sessao")&"</b>"
Response.Write "</td></tr>"
SQL = "SELECT * FROM subsessoes WHERE cod_id ='"&RSmenu("id")&"'"
Set RSsubmenu = conexao.execute(SQL)
If Not RSsubmenu.EOF Then
Response.Write "<tr><td>"
Do While Not RSsubmenu.EOF
Response.Write "[+] "&RSsubmenu("subsessao")
Response.Write "<br>"
RSsubmenu.MoveNext
Loop
Response.Write "</td></tr>"
Response.Write "<tr><td><img src='linha.gif'/></td></tr>"
End If
RSmenu.MoveNext
Loop
%>
Agora o meu Menu Dinâmico está funcionando perfeitamente e ficou assim:
/applications/core/interface/imageproxy/imageproxy.php?img=http://www.hdwd.com.br/gif/menuOK.gif&key=db352af47c7b5f9d2f6e59966db45dcd9506a4188e7968048d0da440ce1433e6" alt="menuOK.gif" />
Valeu pela ajuda Vinícius e podem postar este tópico como RESOLVIDO!!!
Que bom que resolveu !
Precisando, estamos ai :joia:
Depois do inner join, coloca o group by, assim irá agrupar os registros por algum parametro que eles tenham em comum