Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/08/2014, 05:59
Avatar de fbedia
fbedia
 
Fecha de Ingreso: julio-2010
Mensajes: 159
Antigüedad: 13 años, 10 meses
Puntos: 8
Categorias, Subcategorias y Recursividad

Buenas!
Estoy atascado con este tema...

Estoy tratando de mostrar una tabla de mi DB donde almaceno las "Categorias".

Estas categorias pueden tener otras subcategorias y estas a su vez otras subcategorias.... y estas a su vez podrían tener mas subcategorias...etc..etc..

Un ejemplo de datos seria:
Cita:
- DEPORTES
-- TIERRA
--- FUTBOL
---- FUTBOL BASE
---- FUTBITO
---- FUTBOL PROFESIONAL
--- SKY
--- TENIS
-- MAR
---- REMO
---- NADO
-- AIRE
--- SALTO PARACAIDAS
Como ven, podria habe muchas subcategorias.... y yo desconozco hasta cuantos niveles puede llegar, por eso creo que lo que necesito es una funcion RECURSIVA... pero no doy con la forma de hacerlo :(

La tabla "CATEGORIAS" consta de estos campos:
Cita:
id_categoria (INT)
nombre (TEXT)
id_categoria_padre (INT)
(las categorias principales tienen el id_categoria_padre=0

Les postearia el codigo que tengo.... pero creo que seria peor porque no logro la recursividad.
Lo mejor quizas sea partir de este ejemplo:

Código PHP:
Ver original
  1. $sql = mysqli_query($link,"SELECT id_categoria, nombre, id_categoria_padre FROM categorias WHERE id_categoria_padre=0");
  2.  
  3. $parent = mysqli_fetch_assoc($sql);
  4.  
  5. foreach ($parent as $p)
  6. {
  7.   echo "<h2>{$p['nombre']}</h2><ul>";
  8.   $sql = mysqli_query($link,"SELECT id_categoria, nombre, id_categoria_padre FROM categorias WHERE id_categoria_padre  = '{$p['id_categoria_padre ']}'");
  9.   $child = mysqli_fetch_assoc($sql);
  10.   foreach ($child as $c)
  11.   {
  12.     echo "<li>{$c['nombre']}</li>";
  13.   }
  14.   echo "</ul>";
  15. }

El codigo anterior muestra las categorias padre y un nivel de subcategoria....
Lo que necesito es que se muestre (si lo hay) las subcategorias de las subcategorias...

Espero haberme explicado!
Muchas gracias y un saludo.
__________________
Follow me on twitter @franbedia