Ver Mensaje Individual
  #4 (permalink)  
Antiguo 17/09/2008, 13:48
Juan_Bautista
 
Fecha de Ingreso: septiembre-2008
Mensajes: 19
Antigüedad: 18 años, 1 mes
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` (
  `
id` int(11) NOT NULL auto_increment,
  `
nombre` varchar(30) NOT NULL default '',
  `
padre` int(11) default NULL,
  `
izq` int(11) NOT NULL default '0',
  `
der` int(11) NOT 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', NULL, 1, 12),
(
2, 'Libros', 1, 2, 7),
(
3, 'Aventura', 2, 3, 6),
(
4, 'Infantil', 3, 4, 5),
(
5, 'Zapatos', 1, 8, 9),
(
6, 'Celulares', 1, 10, 11); 
Código PHP:
<?php  
//--CONEXIÓN-------------------------------------------------------
$dblink = mysql_connect('servidor','usuario','clave');
mysql_select_db('tienda');
//-----------------------------------------------------------------
function recorrer_arbol($raiz){  
    
$result= mysql_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<---