Foros del Web » Programando para Internet » PHP »

Borrar todos los hijos

Estas en el tema de Borrar todos los hijos en el foro de PHP en Foros del Web. Hola a todos. Tengo una base de datos con una tabla donde guardo categorías. Éstas categorías pueden tener subcategorías, y cada subcategoría también puede tener, ...
  #1 (permalink)  
Antiguo 28/04/2007, 05:03
Avatar de mariogl84  
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona
Mensajes: 433
Antigüedad: 21 años, 5 meses
Puntos: 20
Borrar todos los hijos

Hola a todos.

Tengo una base de datos con una tabla donde guardo categorías. Éstas categorías pueden tener subcategorías, y cada subcategoría también puede tener, y así hasta el nivel que sea. En la tabla guardo nombre de la categoría, nivel en el que se encuentra y la id de su categoría padre.

Por ejemplo, para esta jerarquía:

Cremas
|---- Crema de puerros
|---- Gazpacho
| |------ Con pan
| |------ Sin pan
| |------- Suave
| |------- Fuerte
|---- Vichysoisse


Tengo esta tabla:
ID CATEGORÍA NIVEL PADRE
1 Cremas 1 0
2 Crema de puerros 2 1
3 Gazpacho 2 1
4 Vichysoisse 2 1
5 Con pan 3 3
6 Sin pan 3 3
7 Suave 4 6
8 Fuerte 4 6


¿Alguien me puede dar un algoritmo que me permita, eligiendo una categoría de cualquier nivel, eliminarla junto con todas sus categorías hijas? Por ejemplo, si elijo eliminar "Gazpacho", se deberían borrar las categorías "Gazpacho", "Con pan", "Sin pan", "Suave" y "Fuerte".

Muchas gracias de antemano.
  #2 (permalink)  
Antiguo 28/04/2007, 06:09
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 10 meses
Puntos: 834
Re: Borrar todos los hijos

Fijate si esto te sirve:
Código PHP:
<?php
mysql_connect
('localhost','root','');
mysql_select_db('padre');
function 
obtenerValores($idpadre,&$acum){
$acum[]=$idpadre;
$qry=mysql_query("select * from tabla where PADRE='$idpadre'");
while(
$row=mysql_fetch_assoc($qry)){
//echo $row['CATEGORIA'].'<br />';
$acum[]=$row['ID'];
obtenerValores($row['ID'],$acum);
}
}
$acum=array();
obtenerValores(3,$acum);
$idis=array_unique($acum);
$val=implode("','",$idis);
if(
count($idis)>0)
mysql_query("delete from tabla where ID in ('$val')");
?>

Última edición por Panino5001; 28/04/2007 a las 07:18
  #3 (permalink)  
Antiguo 28/04/2007, 07:01
Avatar de mariogl84  
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona
Mensajes: 433
Antigüedad: 21 años, 5 meses
Puntos: 20
Re: Borrar todos los hijos

¡Va perfecto! Mil gracias, Panino5001.
  #4 (permalink)  
Antiguo 28/04/2007, 07:17
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 10 meses
Puntos: 834
Re: Borrar todos los hijos

Me alegra que te haya servido (Igualmente, en la última línea edité el ID, poniéndolo en mayúsculas para que sea coherente con el resto del código)
  #5 (permalink)  
Antiguo 29/04/2007, 05:20
Avatar de mariogl84  
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona
Mensajes: 433
Antigüedad: 21 años, 5 meses
Puntos: 20
Re: Borrar todos los hijos

No te preocupes, ya hice los cambios pertinentes para adaptarlo a mi código. Lo que puse arriba era un ejemplo inventado para plantear la duda.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:19.