Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ai está uma função com seu banco já pronto, ai ele está apenas listando assim:
menu
----subitenMenu
--------Subitemmenu1
--------Subitemmenu2
----subitenMenu2
--------Subitemmenu1
--------Subitemmenu2
dá para por em um menu em um site por exemplo...
//BancoCREATE TABLE `prodserv_cat` ( `id` int(3) NOT NULL auto_increment, `codigo` varchar(55) NOT NULL default '', `idpai` int(3) NOT NULL default '0', `texto` varchar(255) NOT NULL default '', `ativo` int(1) NOT NULL default '0', PRIMARY KEY (`id`)) TYPE=MyISAM AUTO_INCREMENT=1;
<table width="500" border="0" cellpadding="0" cellspacing="1" bgcolor="#003366"> <tr bgcolor="#FFFFFF"> <td colspan="3" align="center" bgcolor="#003366" class="textoboldbranco">Listagem das Categorias</td> </tr> <?function lista($idpai){ $sql=mysql_query("SELECT * FROM prodserv_cat WHERE idpai='$idpai' ORDER BY texto ASC"); if(mysql_num_rows($sql)!=0){ while($res=mysql_fetch_array($sql)){ $sql2=mysql_query("SELECT * FROM prodserv_cat WHERE idpai='$res[id]' ORDER BY texto ASC"); $widpai=$res["id"]; $esp=0; while($widpai!=0){ $sql3=mysql_query("SELECT idpai FROM prodserv_cat WHERE id='$widpai'"); $res3=mysql_fetch_array($sql3); $widpai=$res3["idpai"]; if($widpai!=0) $esp++; } $esps=str_repeat(" ", $esp*4); //aki print" <tr bgcolor=\"#FFFFFF\" class=\"texto\" onMouseover=\"changeto('#CCCCCC')\" onMouseout=\"changeback('#FFFFFF')\"> <td width=\"406\"> $esps$res[codigo] $res[texto]</td> <td width=\"20\" align=\"center\"><a href=\"prodserv_cat.php?acao=alt&id=$res[id]\"><img src=\"imagens/icon14_alterar.gif\" alt=\"Alterar\" width=\"14\" height=\"14\" border=\"0\"></a></td> <td width=\"20\" align=\"center\"><a href=\"#\" onClick=\"return pergunta('Deseja excluir esta Categoria?','prodserv_cat_sql.php?acao=exc&id=$res[id]')\"><img src=\"imagens/icon14_lixeira.gif\" alt=\"Excluir\" width=\"14\" height=\"14\" border=\"0\"></a></td> </tr> "; //aki if(mysql_fetch_array($sql2)){ lista($res["id"]); } } }}$sqlw=mysql_query("SELECT * FROM prodserv_cat");if(!mysql_num_rows($sqlw)){?> <tr bgcolor="#FFFFFF"> <td colspan="3" align="center" class="textobold">NENHUM MENU CADASTRADO</td> </tr> <? }else{ lista(0); }?> </table>Resto? ai já está o código....so precisa inserir dados na tabela criada....
uhnm, ta fraco não ta não !?select * !?da pra fazer esse menu com um select só :Dutilizando joins!mas valeu a iniciativa!
> uhnm, ta fraco não ta não !?select * !?da pra fazer esse menu com um select só biggrin.gifutilizando joins!mas valeu a iniciativa!
1 select só? Join?nao sei se você viu mas ali eh so uma tabela....tem vários selects pois é uma Função recursiva(não que os SELECTS tenham a ver com recursividade, mas nessa função sim), mas o primeiro select é apenas para ver se tem algum registro, pois se não tiver ele já termina e se tiver imprime a TR, o 2 select é para ver se tem novos menu com aquele idpais, se não tiver termina tb, e o 3 select nao lembro direito mas me parece que ele serve para ir verificando se o widpai chegou no 0 para parar de adicionar $esp++ que é o espacamento que ele dá:menu----subitenMenu--------Subitemmenu1--------Subitemmenu2------------Subitemmenu2bem daria pra melhorar esse código, fazer em <ul><li> e etc, mas se você consegue fazer tudo isso ai em 1 SELECT só, usando esta função.....faça ai e me manda que eu arrumo, e ponho Créditos para você tb....pois eu não vejo como. Mas utilizando essa função... nada de inventar outra ou fazer outro esquema...absÉ cara, eu raramente posto scripts, mas eu tinha percebido que era apenas 1 tabela.
E em resposta a sua dúvida. Sim!! Tem como fazer um join ali, isso chama-se auto-relacionamento saca !?
Esse artigo cita alguma coisa ó:
http://www.sqlmagazine.com.br/Colunistas/R...odelagem_P2.asp
Caso voce queria fazer utilizando apenas 1 select, não só a consulta mudaria, como a lógica toda do sistema.
um select em um auto-relacionamento seria mais ou menos assim:
SELECT filho.nome, filho.id, pai.nome, pai.id FROM tbl filho INNER JOIN tbl pai ON filho.idpai=pai.id ORDER BY filho.nome> É cara, eu raramente posto scripts, mas eu tinha percebido que era apenas 1 tabela.E em resposta a sua dúvida. Sim!! Tem como fazer um join ali, isso chama-se auto-relacionamento saca !?Esse artigo cita alguma coisa ó:[http://www.sqlmagazine.com.br/Colunistas/R...odelagem_P2.asp](http://www.sqlmagazine.com.br/Colunistas/R...odelagem_P2.asp)Caso voce queria fazer utilizando apenas 1 select, não só a consulta mudaria, como a lógica toda do sistema.um select em um auto-relacionamento seria mais ou menos assim:SQLSELECT filho.nome, filho.id, pai.nome, pai.id FROM tbl filho INNER JOIN tbl pai ON filho.idpai=pai.id ORDER BY filho.nome
Então cara ai teria que mudar a logica, função inteira....olha esse script do tmferreira:[http://forum.imasters.com.br/index.php?showtopic=192384](http://forum.imasters.com.br/index.php?showtopic=192384)é praticamente igual o meu.....só que mais limpo e usando Javascript...Entao esse auto-relacionamento nunca tinha ouvido falar...tentei essa sua query mas nao funcionou, e não vejo uma logica que funcionaria isso, pois estaria fazendo um join na mesma tabela?? vo faze uma busca, pra estuda um poko mais isso...pois dei uma lida na página que você passou e ficou meio vago como seria o código etc...SELECT prodserv_cat.nome, prodserv_cat.id, prodserv_cat.nome, prodserv_cat.id FROM prodserv_cat INNER JOIN prodserv_cat ON prodserv_cat.idpai=rodserv_cat.id ORDER BY prodserv_cat.nomeretorno erro: Not unique table/alias: 'prodserv_cat'tem que apelidar as tabelas, presta atenção na minha consulta la ...
ahhh simmm foi....lgealmas muda totalmente o código, não é a ideia do tópico
Coloca o codigo melhorado ai galera pra todo mundo ter acesso!!!!
Ola coloca o codigo melhorado por favor!!!
amigo, cade o restodocodigo ou seja a conexao com o cando de dados? posta ae para a galera abração
Parabéns pelo script http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif
Funcionou direitinho!
cade o resto do script????