Foros del Web » Programando para Internet » PHP »

Delete u poco extraño

Estas en el tema de Delete u poco extraño en el foro de PHP en Foros del Web. Hola a todos, tengo un pequeño problema al hacer un delete. El tema es el que sigue: Tengo una tabla categorias, donde cada categoría puede ...

  #1 (permalink)  
Antiguo 02/09/2009, 05:33
Avatar de anibalag85  
Fecha de Ingreso: marzo-2009
Mensajes: 52
Antigüedad: 15 años, 1 mes
Puntos: 1
Delete u poco extraño

Hola a todos, tengo un pequeño problema al hacer un delete. El tema es el que sigue:
Tengo una tabla categorias, donde cada categoría puede tener una categoria padre que se encuentra en la misma tabla, convirtiendo esta tabla en recursiva o algo así.

La tabla sería la siguiente:

Categorias
----------------
Cod_Categoria (int) Calve principal
Nombre(varchar 45)
Id_CategoriaPadre(int)

Pues bien, al insertar una categoría te aparece un combo con la lista de categorías y escoges una y esa es su padre, así que ese código se convierte en el Id_Categoria padre de la nueva categoria.

Ahora viene el problema, lo que yo deseo es que al eliminar una categoría que es padre de alguna elimine todas las categorías hijas, pero a su vez, que estas eliminen a sus hijas, yasí sucesivamente hasta que ya no tubieran mas hijas.

Tal vez me he explicado mal, pero si estais dispuestos ha ayudarme aré lo que sea para explicarme mejor o lo que sea, llevo ya tiempo con esto y me tiene aburrido.

Gracias de antemano
  #2 (permalink)  
Antiguo 02/09/2009, 07:58
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Delete u poco extraño

Aunque no te explicas bien, creo saber cual es tu problema.

tienes una relación de un campo con otro campo en la misma tabla. y necesitas que al borrar un código padre se borren los hijos. te pongo un ejemplo y me dices si es lo que necesitas. Para esto, es necesario hacer uso de la sentencia ON DELETE CASCADE en la creación de la tabla.

Código mysql:
Ver original
  1. mysql> create table categorias(cod integer primary key,nombre text,padre_cat integer,foreign key (padre_cat) references categorias(cod) on delete cascade);
  2. Query OK, 0 rows affected (0.02 sec)
  3.  
  4. mysql> insert into categorias values(1,'daniel',null);
  5. Query OK, 1 row affected (0.00 sec)
  6.  
  7. mysql> insert into categorias values(2,'sara',1);
  8. Query OK, 1 row affected (0.00 sec)
  9.  
  10. mysql> insert into categorias values(3,'taty',null);
  11. Query OK, 1 row affected (0.00 sec)
  12.  
  13. mysql> select *from categorias;
  14. +-----+--------+-----------+
  15. | cod | nombre | padre_cat |
  16. +-----+--------+-----------+
  17. |   1 | daniel |      NULL |
  18. |   2 | sara   |         1 |
  19. |   3 | taty   |      NULL |
  20. +-----+--------+-----------+
  21. 3 rows in set (0.00 sec)
  22.  
  23. mysql> delete from categorias where cod=1;
  24. Query OK, 1 row affected (0.01 sec)
  25.  
  26. mysql> select *from categorias;
  27. +-----+--------+-----------+
  28. | cod | nombre | padre_cat |
  29. +-----+--------+-----------+
  30. |   3 | taty   |      NULL |
  31. +-----+--------+-----------+
  32. 1 row in set (0.00 sec)
  33.  
  34. mysql>

Como ves, el código 1 se borró y el 2 que tenía el padre como código 1 también se borró. Queda el código 3 que no tiene relación directa con uno.

es lo que buscas?

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 02/09/2009, 09:19
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Delete u poco extraño

Uuuuhhhhh, no sabia que se podia hacer eso desde MySQL y yo matandome con PHP haciendo eso
¿El reference es el que le dice al delete cascade que debe mirar?

Definitivamente me voy a dedicar 12 años a estudiar MySQL bien

Otra duda si yo creo eso mismo pero en dos tablas diferentes ¿el DELETE CASCADE tambien borrara lo que haya en las dos tablas, usando el mismo ejemplo que escribiste pero en dos tablas?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 02/09/2009 a las 09:37
  #4 (permalink)  
Antiguo 02/09/2009, 09:36
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Delete u poco extraño

Que tal abimaelrc

Cita:
¿El reference es el que le dice al delete cascade que debe mirar?
Realmente lo que hace, es borrar todos los registros que tengan dependencia de dicho registro.
si no existiese la clausula on delete cascade mysql genera un error de violación de integridad referencial.

Este se comporta exactamente igual a que los registros estuvieran en otra tabla y se borrara una primary key. Se borran todas las dependencias que existan. En este caso, se presenta en la propia tabla.

Un efecto curioso, es que al borrar de la tabla, observen como dice que se elimina únicamente 1 registro, cuando en realidad se están borrando 2. El segundo es invisible ante la borrada del primero.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 02/09/2009, 09:47
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Delete u poco extraño

Otra cosa leyendo por ahi indican que para que funcione lo de REFERENCES y ON DELETE CASCADE ¿es obligado declarar el campo FOREIGN KEY?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #6 (permalink)  
Antiguo 02/09/2009, 09:57
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Delete u poco extraño

existen varios tipos de constraint y cada uno maneja su propia sintaxis.

efectivamente, las clausulas on delete cascade y on update cascade son soportadas para constraints foreign key.

Mira este apartado
http://dev.mysql.com/doc/refman/5.0/...nstraints.html

saludos sensei 4 estrellas. jajaja
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 02/09/2009, 10:00
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Delete u poco extraño

Si yo soy sensei tu seras shihan en mysql Lo unico que te adelantaste porque requieres de 5 o 6 estrellas para llegar a shihan.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #8 (permalink)  
Antiguo 03/09/2009, 01:16
Avatar de anibalag85  
Fecha de Ingreso: marzo-2009
Mensajes: 52
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Delete u poco extraño

Joer, eres el puto amo, voy a probarlo en cuanto que pueda. Cuanto que lo haga te escribo por aquí para decirte como ha ido la cosa. A mi me pasaba igual que a nuestro compañero abimaelrc, yo estaba intentándolo por PHP y me estaba volviendo loco, ya que no solo piede haber padre e hijo, si no que puedehaber nietos, bisnietos, tataranietos, etc..........

En fin, que eres un crack, karma subido descaradamente.
  #9 (permalink)  
Antiguo 04/09/2009, 01:23
Avatar de anibalag85  
Fecha de Ingreso: marzo-2009
Mensajes: 52
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Delete u poco extraño

Perdona Huesos52, este link que me has puesto es para cuando hay dos tablas. Mi cuestión es la siguiente, ¿Sirve igualmente cuando hay solo una tabla que tiene los hijos dentro de si misma?, lo que se conoce como una tabla recursiva?, es que me he puesto a leerlo y he visto que es para las convinaciones, si se pudiera untilizar con una tabla solo sería perfecto.
Gracias
  #10 (permalink)  
Antiguo 04/09/2009, 02:09
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Delete u poco extraño

En el comentario #2 esta lo que buscas.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #11 (permalink)  
Antiguo 04/09/2009, 05:02
Avatar de anibalag85  
Fecha de Ingreso: marzo-2009
Mensajes: 52
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Delete u poco extraño

Oye abimaelrc, ya por curiosidad, como lo hacias tu en PHP, es que yo lo estube intentando y lo tengo casi terminado, es un poco complejo pero va a funcionar(según mis cálculos de los cuales no me fio mucho), pero como digo es simple curiosidad, ¿Como lo haces?
  #12 (permalink)  
Antiguo 04/09/2009, 05:32
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Delete u poco extraño

Como te dice abimaelrc en el post 2 te pongo un ejemplo con una tabla "recursiva".

Revisalo bien.

saludos a ambos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #13 (permalink)  
Antiguo 04/09/2009, 09:11
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Delete u poco extraño

Es sencillo. Logicamente ya de aqui en adelante voy a usar la de huesos52 pero en el caso tuyo que esta dentro de una misma tabla hacia un query que lo declarabla algo así

tabla categorias MySQL que te demostro huesos52
cod,nombre,padre_cat
Código MYSQL:
Ver original
  1. DELETE FROM categorias WHERE cod=$id or padre_cat=$id
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #14 (permalink)  
Antiguo 07/09/2009, 02:38
Avatar de anibalag85  
Fecha de Ingreso: marzo-2009
Mensajes: 52
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Delete u poco extraño

Mirad, he hecho este código en PHP, creo que está bien pero tengo algunos problemas.

Código PHP:
/*******Aquí se empieza el delete*******/
                
/*Primero empezamor rellenando los arrays*/
                
                
$sentenciaBorrar="select * from CATEGORIAS_PRODUCTOS where Id_CategoriaPadre=".$nombre_campo;//Miramos todas las categorias hijo que tiene
                
$resultBorrar=mysql_query($sentenciaBorrar,$link);
                
                
$cont=1;
                while(
$datosBorrar=mysql_fetch_array($resultBorrar)){
                    
                    
$arrayBorrar.$cont = new array();
                    
array_push($arrayBorrar.$cont,$datosBorrar['Cod_Categoria']); //Metemos en otro array los codigos de los hijos
                    
                
}
                
                
//Empezamos un bucle para ver todos los hijos del todos los padres del array
                
                
while($arrayBorrar.$cont[0]!=""){//Primero hacemos un bucle de para rellenar arrays segun su nivel y que pare cuando el último relleno esté vacio
                    
                    
$cont++;//Cuenta el array que estamos rellenando
                    
$contAnterior=$cont-1;//Para hacer la busqueda en el erray anterior
                    
$numero=$arrayBorrar.$contAnterior;
                    
$maximo=$numero.length;//calculamos la  longitud del array anterior
                    
                    
                    
for($i=0;$i<=$maximo;$i++){//Hacemos otro bucle para pasar por todos los registros del array anterior y sacar sus hijos
                                                
                        
$sentenciaBorrar2="select * from CATEGORIAS_PRODUCTOS where Id_CategoriaPadre=".$arrayBorrar.$contAnterior[$i];//Miramos todas las categorias hijo que tiene
                        
$resultBorrar2=mysql_query($sentenciaBorrar2,$link);
                        
                        while(
$datosBorra2r=mysql_fetch_array($resultBorrar2)){
                            
                            
array_push($arrayBorrar.$cont,$datosBorrar2['Cod_Categoria']); //Metemos en otro array los codigos de los hijos
                        
}
                    }
                }
/*Terminamos de rellenar los arrays*/
                /*-------------------------------------------------------------------------------------------------------------------------*/
                /*Empezamos a eliminar*/
                
                
for($cont;$cont>=0;$cont--){
                    
                    
$numero=$arrayBorrar.$cont;
                    
$maximo=$numero.length;//calculamos la  longitud del array
                    
for($k=1;$k<=maximo;$k++){
                        
                        
$sentencia="delete from CATEGORIAS_PRODUCTOS where Cod_Categoria=".$arrayBorrar.$cont[$k];
                        
                    }
                    
                    
                }
                
                
/*Terminamos de eliminar*/
/************Aquí se termina el delete***********/ 
Pero tengo problemas al nombrar a los arrays como $arrayBorrar.$cont, porque no me lo admite, yo quería ponerlo así para poder hacer un bucle while y que cada array se llamara diferente.

Me gustaría saber vuestra opinión que sois mas expertos que yo.
Si teneis cualquier duda sobre el código me lo comentais y explico lo que pretendo hacer.

Grasias a todos
  #15 (permalink)  
Antiguo 07/09/2009, 02:40
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Delete u poco extraño

Te sugiero que comentes mejor lo que quieres y que arregles el codigo, me refiero a lo indentado. Esta demasiado dificil leerlo así.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #16 (permalink)  
Antiguo 07/09/2009, 02:48
Avatar de anibalag85  
Fecha de Ingreso: marzo-2009
Mensajes: 52
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Delete u poco extraño

Bueno, el código que he puesto está comentado, lo que yo pretendo es que me llegue el código de la categoria, que como verán al principio se llama $nombre_campo, y buscar los hijos que tiene con una sentencia select, con el resultado de la sentencia mysql meto los codigos de sus hijos en un array y busco los hijos de todos los que hay en el array y los meto en otro array, así sucesivamente hasta que llegue a que la categoria no tiene hijos.

Cuando he acabado de hacer esto, borro los arrays alreves para que borre primero a los hijos y luego a los padres. Por lo menos he pretendido hacer eso, si queda alguna otra duda solo pregunte.
  #17 (permalink)  
Antiguo 07/09/2009, 02:59
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Delete u poco extraño

Iiiiccchhh estoy mareado con la explicacion. Pero dejame corregirte algo. Siempre es bueno usar los array en todo el sentido de la palabra. Mira lo que estas haciendo
Código PHP:
Ver original
  1. while($datosBorrar=mysql_fetch_array($resultBorrar)){
  2.   $arrayBorrar.$cont = new array();
  3.   array_push($arrayBorrar.$cont,$datosBorrar['Cod_Categoria']); //Metemos en otro array los codigos de los hijos
  4. }
No debe ser así, debe ser algo parecido a esto
Código PHP:
Ver original
  1. while($datosBorrar=mysql_fetch_array($resultBorrar)){
  2.   array_push($arrayBorrar[],$datosBorrar['Cod_Categoria']);
  3. }
  4. print_r($arrayBorrar);
No se si de esta forma te servira para lo que quieres hacer, habría que hacer prueba hasta lograr lo que quieres, pero debe funcionar. Primero haz eso y luego trabajamos con lo demas.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #18 (permalink)  
Antiguo 07/09/2009, 03:08
Avatar de anibalag85  
Fecha de Ingreso: marzo-2009
Mensajes: 52
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Delete u poco extraño

De acuerdo, pero ¿es que no se puede hacer lo de $arrayBorrar.$cont[]?.
Es que despues hago un bucle donde en cada vuelta meto los elementos de una consulta en un array diferente, y me interesa que el array cambie de nombre cada vuelta para tener los niveles en distintos arrays.
De todas formas, voy ha hacer lo que me has dicho para que funcione eso
  #19 (permalink)  
Antiguo 07/09/2009, 03:10
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Delete u poco extraño

Vas a notar mas adelante que es mas facil trabajarlo en un array multiple que hacerlo con numeros. Te van a ser muy utiles las funciones de los array. Trata de cambiarlo a ese formato y luego me dejas saber como te ha ido con el codigo.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #20 (permalink)  
Antiguo 07/09/2009, 03:19
Avatar de anibalag85  
Fecha de Ingreso: marzo-2009
Mensajes: 52
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Delete u poco extraño

Cuando dices una array múltiple te refieres a un array que está relleno de arrays no?, pues si es así si que puede ser la solución.
gracias
  #21 (permalink)  
Antiguo 07/09/2009, 04:54
Avatar de anibalag85  
Fecha de Ingreso: marzo-2009
Mensajes: 52
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Delete u poco extraño

He cambiado el código, creo que está mejor ahora, pero no me llega a liminar las categorías, por que no entra en el último for().
Te pongo el código
Código PHP:
/*******Aquí se empieza el delete*******/
                
                /*Primero empezamor rellenando los arrays*/
                
                //el $nombre_campo es el código de la categoría que queremos eliminar
                
$sentenciaBorrar="select * from CATEGORIAS_PRODUCTOS where Id_CategoriaPadre=".$nombre_campo;//Miramos todas las categorias hijo que tiene
                
$resultBorrar=mysql_query($sentenciaBorrar,$link);
                
                
$cont=1;//Contador de arrays
                
while($datosBorrar=mysql_fetch_array($resultBorrar)){
                    
                    
array_push($arrayBorrar[],$datosBorrar['Cod_Categoria']); //Metemos en un array los codigos de los hijos
                    
                
}
                
array_push($arrayGeneral[$cont],$arrayBorrar);//Incorporamos al array general el último array
                
                //Empezamos un bucle para ver todos los hijos de todos los padres del array
                
                
while($arrayBorrar[0]!=""){//Primero hacemos un bucle de para rellenar arrays segun su nivel y que pare cuando el último relleno esté vacio
                    
                    
$cont++;//Cuenta el array que estamos rellenando
                    
$contAnterior=$cont-1;//Para hacer la busqueda en el array anterior
                    
$maximo=$arrayGeneral[$contAnterior].length;//calculamos la  longitud del array anterior
                    
                    
                    
for($i=0;$i<=$maximo;$i++){//Hacemos otro bucle para pasar por todos los registros del array anterior y sacar sus hijos
                                                
                        
$sentenciaBorrar2="select * from CATEGORIAS_PRODUCTOS where Id_CategoriaPadre=".$arrayGeneral[$contAnterior][$i];//Miramos todas las categorias hijo que tiene
                        
$resultBorrar2=mysql_query($sentenciaBorrar2,$link);
                        
                        while(
$datosBorrar2=mysql_fetch_array($resultBorrar2)){
                            
                            
array_push($arrayBorrar,$datosBorrar2['Cod_Categoria']); //Metemos en otro array los codigos de los hijos
                        
}
                    }
                    
array_push($arrayGeneral[$cont],$arrayBorrar);
                }
                
                
/*Terminamos de rellenar los arrays*/
                /*-------------------------------------------------------------------------------------------------------------------------*/
                /*Empezamos a eliminar*/
                
                
for($i=$cont;$i>=0;$i--){//Este for es para que pase por todos los objetos del arrayGeneral
                    
                    
                    
for($k=1;$k<=$arrayGeneral[$i].length;$k++){//Este for es para que pase por todos los objetos que se encuentran en un array dentro del arrayGeneral
                        
                        
$sentencia="delete from CATEGORIAS_PRODUCTOS where Cod_Categoria=".$arrayGeneral[$i][$k];//Esta sentencia borra las categorias
                        
$result=mysql_query($sentencia,$link);
                        ;
                        
                    }
                    
                    
                }
                
                
                
/*Terminamos de eliminar*/
                /************Aquí se termina el delete***********/ 
No se que podrá ser, es que no estoy muy puesto en arrays multidimensionales, por eso será digo yo.
  #22 (permalink)  
Antiguo 07/09/2009, 05:28
Avatar de anibalag85  
Fecha de Ingreso: marzo-2009
Mensajes: 52
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Delete u poco extraño

Se me ha olvidado poner que la tabla sobre la que estoy haciendo las sentencias es la siguiente:

Categorias_Productos
----------------------------
CodCategoria (INT)
Id_CategoriaPadre (INT)
Nombre (VAERCHAR(45))
  #23 (permalink)  
Antiguo 08/09/2009, 07:36
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Delete u poco extraño

Por favor, no coloque código de programación en la sección de bases de datos.
Véase: http://www.forosdelweb.com/f21/funci...-datos-413499/

Gracias.

Tema transladado desde la sección de MySQL.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #24 (permalink)  
Antiguo 14/09/2009, 04:33
Avatar de anibalag85  
Fecha de Ingreso: marzo-2009
Mensajes: 52
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Delete u poco extraño

Perdona abimaelrc, pero es que no encuentro eso que me dices tu del delete cascade, me dices que es en el comentario dos pero no encuentro exactamente donde está, porque solo veo que hace el delete cascade cuando hay mas de una tabla y no cuando el hijo está en la misma tabla que el padre.
Perdona que te moleste y eso, pero es que no lo encuentro,jajajaja.
Gracias
  #25 (permalink)  
Antiguo 14/09/2009, 04:50
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Delete u poco extraño

Muchacho, como que no lo vez. Copio integramente lo que huesos52 te indico

Código mysql:
Ver original
  1. mysql> CREATE TABLE categorias(cod INTEGER PRIMARY KEY,nombre TEXT,padre_cat INTEGER,FOREIGN key (padre_cat) REFERENCES categorias(cod) on DELETE CASCADE);
  2. Query OK, 0 rows affected (0.02 sec)
  3.  
  4. mysql> INSERT INTO categorias VALUES(1,'daniel',NULL);
  5. Query OK, 1 row affected (0.00 sec)
  6.  
  7. mysql> INSERT INTO categorias VALUES(2,'sara',1);
  8. Query OK, 1 row affected (0.00 sec)
  9.  
  10. mysql> INSERT INTO categorias VALUES(3,'taty',NULL);
  11. Query OK, 1 row affected (0.00 sec)
  12.  
  13. mysql> SELECT *FROM categorias;
  14. +-----+--------+-----------+
  15. | cod | nombre | padre_cat |
  16. +-----+--------+-----------+
  17. |   1 | daniel |      NULL |
  18. |   2 | sara   |         1 |
  19. |   3 | taty   |      NULL |
  20. +-----+--------+-----------+
  21. 3 rows IN SET (0.00 sec)
  22.  
  23. mysql> DELETE FROM categorias WHERE cod=1;
  24. Query OK, 1 row affected (0.01 sec)
  25.  
  26. mysql> SELECT *FROM categorias;
  27. +-----+--------+-----------+
  28. | cod | nombre | padre_cat |
  29. +-----+--------+-----------+
  30. |   3 | taty   |      NULL |
  31. +-----+--------+-----------+
  32. 1 row IN SET (0.00 sec)
  33.  
  34. mysql>

Todo esto es una sola tabla. No hay dos tablas aqui, solo una.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #26 (permalink)  
Antiguo 14/09/2009, 04:59
Avatar de anibalag85  
Fecha de Ingreso: marzo-2009
Mensajes: 52
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Delete u poco extraño

Lo siento mucho, pero es que estaba buscando en la página de mysql en vez de en el foro, es que soymuy despistado, perdoname, voy a probar todo esto, porque hay un nuevo problema, cada categoria lleva asociada unos productos que estan en otra tabla, y esos productos tienen una foto subida por ftp, así que a ver como me las apaño pa que funcione todos.
Gracias de todos modos, mi duda de mysql me la habéis resuelto satisfactoriamente, karma para todos
  #27 (permalink)  
Antiguo 15/09/2009, 01:39
Avatar de anibalag85  
Fecha de Ingreso: marzo-2009
Mensajes: 52
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Delete u poco extraño

Eres el puñetero amo, funciona de p.madre. Lo qu estoy mirando es que puedo hacer un update también en cascada, pero ¿puedo hacer un select en cascada?, es que estoy mirando en la página oficial de mysql y no viene nada. Si ustedes lo supiérais...... La verdad que sería muy bueno que se pudiese hacer.
Gracias compañeros
  #28 (permalink)  
Antiguo 15/09/2009, 04:40
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Delete u poco extraño

¿A que te refieres con un select en cascada?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #29 (permalink)  
Antiguo 15/09/2009, 05:00
Avatar de anibalag85  
Fecha de Ingreso: marzo-2009
Mensajes: 52
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Delete u poco extraño

Weno, igual que yo hago un delete de una categoría y elimina a todos los hijos y a los hijos de los hijos etc, pues queisiera hacer una consulta select para seleccionar a una categoría y a sus hijos ...... Pero por lo que he visto no se puede, según la página oficial, era por si alguno tendríais alguna idea.
  #30 (permalink)  
Antiguo 15/09/2009, 05:11
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Delete u poco extraño

anibalag 85

No será con el uso de sentencias join?
En una consulta se puede tener información de múltiples tablas.
Sigo sin entender a que te refieres con select en cascada.

Con join puedes extraer info de n tablas.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
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 06:32.