Bom, ontem estive aqui pedindo uma ajuda quanto a duvida em uma logica de um sistema, consegui solucionar esse meu problema através do scriot criado por Stêffano de Moura e postado em um outro site de scripts em PHP(acho que é contra as regras divulgação com links, ne?)
Pois bem, o script funciona perfeitamente, exceto pela minha necessidade. Ele está ordenando por ID(campo id normal), preciso que ordene por ID_INDEXADO(o campo que armazena o id "pai" no banco). Tentei de algumas formas, mas não consegui. Se alguem puder dar uma força...
mapa.class
<? ############################################################################ # Por Stêffano de Moura Barbosa Cardoso...duvidas fano_linux@hotmail.com # ############################################################################ class Dbi { //dados do banco private $conexao = false; private $servidor = "localhost"; private $usuario = "root"; private $senha = "123456"; private $banco = "teste"; public $tabela = "usuarios2"; function conectaDB(){ $this->linkdb = mysql_connect($this->servidor, $this->usuario, $this->senha); // conexao if ($this->linkdb) { $this->conexao = true; //conexao valida $this->select_db = mysql_select_db($this->banco); //select o banco } else { echo"Favor checar sua conexão com os dados."; } } function fecha_link() { $this->fechar = mysql_close($this->linkdb); //fecha conexao $this->conexao = false; } } class Mapa extends Dbi { public $nivel = 0; // nivel de profundidade function pai($cod) { if($this->conexao = true) { // query do primeiro item (nivel zero) $this->query_pai = "SELECT id, nome, id_indexado FROM ".$this->tabela." WHERE id='".$cod."'"; $this->exec_query_pai = mysql_query($this->query_pai) or die ("<b><font color='#FF0000'>Erro ao executar a consulta</font></b>"); while($this->map = mysql_fetch_array($this->exec_query_pai)) { print "<tr><td class='dataTD'>".$this->nivel."</td>"; print "<td class=dataTD >".$this->map['id']."</td>"; print "<td class=dataTD >".$this->map['nome']."</td>"; print "<td class=dataTD >".$this->map['id_indexado']."</td>"; $mapa = new Mapa; $mapa->geramapa($this->map['id'], $this->nivel+1); // chama o metodo de gerar a arvore } } } function geramapa($codigo, $nv) { if($this->conexao = true) { $this->query = "SELECT id, nome, id_indexado FROM ".$this->tabela." WHERE id_indexado='".$codigo."'"; $this->exec_query = mysql_query($this->query) or die ("erro na query"); while($mapeando = mysql_fetch_array($this->exec_query)) { print "<tr><td class='dataTD'>".$nv."</td>"; print "<td class='dataTD' >".$auxbh = $mapeando['id']."</td>"; print "<td class='dataTD' >".$auxxm = $mapeando['nome']."</td>"; print "<td class='dataTD' >".$auxxm = $mapeando['id_indexado']."</td>"; $mapa = new Mapa; $mapa->geramapa($mapeando['id'], $nv+1); //pega o resultado de sua propria query e continua listando até terminar. colocando um nivel a mais para cada query, ou cada vez q o metodo se chamar. } } } } ?>
Edição feita por: onlooker, 06/07/2009, 12:35.