Ir para conteúdo

POWERED BY:

Arquivado

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

augustogava

Menu Recursivo

Recommended Posts

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>

Compartilhar este post


Link para o post
Compartilhar em outros sites

uhnm, ta fraco não ta não !?select * !?da pra fazer esse menu com um select só :Dutilizando joins!mas valeu a iniciativa!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

É 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

Compartilhar este post


Link para o post
Compartilhar em outros sites

É 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.aspCaso 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é 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.nome
retorno erro: Not unique table/alias: 'prodserv_cat'

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.