Ver Mensaje Individual
  #4 (permalink)  
Antiguo 17/09/2008, 13:48
Juan_Bautista
 
Fecha de Ingreso: septiembre-2008
Mensajes: 19
Antigüedad: 15 años, 8 meses
Puntos: 5
Respuesta: Consulta + Array + Arbol de Categorias

Hola,
Storing Hierarchical Data in a Database
http://www.sitepoint.com/article/hierarchical-data-database/2/

La URL anterior describe como como almacenar datos jerárquicamente en una base de datos, así como recorrer en "preorden" el árbol para mostrarlo, añadir un nodo al árbol, etc....

Respecto a mostrar la ruta jeráquicamente, la función que describe permite pasar a dicha función el nodo raíz del subárbol que se mostrará.

...un ejemplo:

Código PHP:
--
-- 
Estructura de tabla para la tabla `categorias`
--

CREATE TABLE IF NOT EXISTS `categorias` (
  `
idint(11NOT NULL auto_increment,
  `
nombrevarchar(30NOT NULL default '',
  `
padreint(11) default NULL,
  `
izqint(11NOT NULL default '0',
  `
derint(11NOT NULL default '0',
  
PRIMARY KEY  (`id`)
ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=14 ;

--
-- 
Volcar la base de datos para la tabla `categorias`
--

INSERT INTO `categorias` (`id`, `nombre`, `padre`, `izq`, `der`) VALUES
(1'Tienda'NULL112),
(
2'Libros'127),
(
3'Aventura'236),
(
4'Infantil'345),
(
5'Zapatos'189),
(
6'Celulares'11011); 
Código PHP:
<?php  
//--CONEXIÓN-------------------------------------------------------
$dblink mysql_connect('servidor','usuario','clave');
mysql_select_db('tienda');
//-----------------------------------------------------------------
function recorrer_arbol($raiz){  
    
$resultmysql_query("SELECT izq,der FROM categorias WHERE id=$raiz");  
    
$fila=mysql_fetch_array($result);  
    
$derecha=array();  
    
$result=mysql_query("SELECT * FROM categorias WHERE izq BETWEEN ".
    
$fila["izq"]." AND ".$fila["der"]." ORDER BY izq ASC");  
    while (
$fila=mysql_fetch_array($result)){  
        
extract($fila);  
        if (
count($derecha)>0){  
          while (
$derecha[count($derecha)-1]<$fila["izq"]){array_pop($derecha);}  
        }  
        echo 
str_repeat('&nbsp;&nbsp;&nbsp;&nbsp;',count($derecha))."<a href='".
        
$_SERVER['PHP_SELF']."?id=$id'>$nombre</a><br>\n";  
        
$derecha[]=$fila["der"];  
   }  
}  
recorrer_arbol(1);
?>
Resultado:

Tienda
Libros
Aventura
Infantil
Zapatos
Celulares


Para mostrar una rama se pasa el nodo raíz de esta, por ej: recorrer_arbol(2);

Libros
Aventura
Infantil


--->Juan Bautista Cascallar Lorenzo<---