Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] query para eliminar en varias tablas

Estas en el tema de query para eliminar en varias tablas en el foro de Mysql en Foros del Web. Hola! me gustaria que pudieran ayudarme que estoy rompiendome la cabeza, quiero eliminar unos registros de 3 tablas, que estan ligadas entre ellas, la primera ...
  #1 (permalink)  
Antiguo 27/06/2013, 10:04
 
Fecha de Ingreso: abril-2013
Mensajes: 29
Antigüedad: 11 años
Puntos: 0
query para eliminar en varias tablas

Hola! me gustaria que pudieran ayudarme que estoy rompiendome la cabeza, quiero eliminar unos registros de 3 tablas, que estan ligadas entre ellas,
la primera es dispositivos (id_respuesta), falla (id_respuesta, id_tecnico) y estadoDispositivo(id_respuesta, id_estado)

el query que estoy usan es este, pero no funciona:

Código SQL:
Ver original
  1. DELETE a,b,c FROM dispositivos AS a JOIN falla AS b JOIN estadoDispositivo AS c ON a.id_respuesta=b.id_respuesta, a.id_respues=c.id_respuesta
  2.             WHERE a.id_respuesta = '" . mysql_real_escape_string($id_respuesta) . ';

este es el error que marca:



y este es la estructura de las tablas:
Código MySQL:
Ver original
  1. CREATE TABLE `dispositivos` (
  2.   `id_respuesta` int(11) NOT NULL AUTO_INCREMENT,
  3.   `opcionSeleccionada` varchar(500) CHARACTER SET latin1 NOT NULL,
  4.   `comentario` varchar(10000) CHARACTER SET latin1 NOT NULL,
  5.   `nombre` varchar(600) CHARACTER SET latin1 NOT NULL,
  6.   `correo` varchar(200) COLLATE utf8_unicode_ci NOT NULL,
  7.   `telefono` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  8.   `unidad` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  9.   PRIMARY KEY (`id_respuesta`)
  10. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2 ;
  11.  
  12. CREATE TABLE `falla` (
  13.   `id_respuesta` int(11) NOT NULL,
  14.   `id_tecnico` int(100) NOT NULL,
  15.   `nombre` varchar(500) CHARACTER SET utf8 NOT NULL,
  16.   KEY `FK_falla_id_respuesta` (`id_respuesta`),
  17.   KEY `FK_falla_id_tecnico` (`id_tecnico`)
  18.  
  19. CREATE TABLE `estadoDispositivo` (
  20.   `id_respuesta` int(11) DEFAULT NULL,
  21.   `id_estado` int(200) DEFAULT NULL,
  22.   `estado` varchar(50) DEFAULT NULL,
  23.   KEY `FK_estadoDispositivo_id_respuesta` (`id_respuesta`),
  24.   KEY `FK_estadoDispositivo_id_estado` (`id_estado`)

por favor agradeceria su ayuda! me urge esta situacion

Última edición por gnzsoloyo; 27/06/2013 a las 10:51 Razón: Codigo de programacion no permitido en foros de BBDD y SQL sin etiquetar.
  #2 (permalink)  
Antiguo 27/06/2013, 10:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: query para eliminar en varias tablas

Estás poniendo el mismo alias en dos tablas diferentes y cada alias debe ser único.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 27/06/2013, 10:58
 
Fecha de Ingreso: abril-2013
Mensajes: 29
Antigüedad: 11 años
Puntos: 0
Respuesta: query para eliminar en varias tablas

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Estás poniendo el mismo alias en dos tablas diferentes y cada alias debe ser único.

En que alias te refieres?
  #4 (permalink)  
Antiguo 27/06/2013, 11:46
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: query para eliminar en varias tablas

El alias "c" aplicado a una tabla está duplicado, según dice el mensaje de MYSQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 27/06/2013, 11:54
 
Fecha de Ingreso: abril-2013
Mensajes: 29
Antigüedad: 11 años
Puntos: 0
Respuesta: query para eliminar en varias tablas

Cita:
Iniciado por gnzsoloyo Ver Mensaje
El alias "c" aplicado a una tabla está duplicado, según dice el mensaje de MYSQL.
Y como pondría el query para que elimine en las 3 tablas?
  #6 (permalink)  
Antiguo 27/06/2013, 12:24
 
Fecha de Ingreso: abril-2013
Mensajes: 29
Antigüedad: 11 años
Puntos: 0
Respuesta: query para eliminar en varias tablas

bueno ahora me marca otro error



y si, quiero solo eliminar de la tabla padre que es dispositivos, no lo borra, entra en la condicion para eliminar pero no lo hace.
AYUDA POR FAVOR!!

Última edición por gise7; 27/06/2013 a las 12:36
  #7 (permalink)  
Antiguo 27/06/2013, 13:01
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: query para eliminar en varias tablas

Probemos:
Código MySQL:
Ver original
  1. FROM dispositivos a JOIN falla b JOIN estadoDispositivo c
  2. ON a.id_respuesta=b.id_respuesta AND a.id_respues = c.id_respuesta
  3. WHERE a.id_respuesta = '" . mysql_real_escape_string($id_respuesta) . ';
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 27/06/2013, 13:07
 
Fecha de Ingreso: abril-2013
Mensajes: 29
Antigüedad: 11 años
Puntos: 0
Respuesta: query para eliminar en varias tablas

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Probemos:
Código MySQL:
Ver original
  1. FROM dispositivos a JOIN falla b JOIN estadoDispositivo c
  2. ON a.id_respuesta=b.id_respuesta AND a.id_respues = c.id_respuesta
  3. WHERE a.id_respuesta = '" . mysql_real_escape_string($id_respuesta) . ';
ahora marca este error:




ya arregle el error de sintaxis ahora me sale un error de que no puedo borrar o actualizar la tabla




y si, quiero solo eliminar de la tabla padre que es dispositivos, no lo borra, entra en la condicion para eliminar pero no lo hace.
AYUDA POR FAVOR!![/QUOTE]

Última edición por gise7; 27/06/2013 a las 13:22
  #9 (permalink)  
Antiguo 27/06/2013, 13:33
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: query para eliminar en varias tablas

Es un problema de dependencias.
Cuando existen relaciones de FK, es mejor hacerlo en más de un paso.

Manual de referencia:
Cita:
Si usa un comando DELETE de varias tablas incluyendo tablas InnoDB para las que hay restricciones de clave foránea, el optimizador MySQL puede procesar tablas en un orden ditinto del de su relación padre/hijo. En este caso, el comando falla y se deshace. En su lugar, debe borrar de una tabla úncia y confiar en la capacidad de ON DELETE que proporciona InnoDB para hacer que las otras tablas se modifiquen correctamente.
http://dev.mysql.com/doc/refman/5.0/es/delete.html
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 27/06/2013, 13:51
 
Fecha de Ingreso: abril-2013
Mensajes: 29
Antigüedad: 11 años
Puntos: 0
Respuesta: query para eliminar en varias tablas

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Es un problema de dependencias.
Cuando existen relaciones de FK, es mejor hacerlo en más de un paso.

Manual de referencia:
[url]http://dev.mysql.com/doc/refman/5.0/es/delete.html[/url]
entonces por lo que entiendo, si borro de una tabla se borra de todas?
es decir si borro del padre, se refleja en las otras tablas? o como?
por ya intente borrar la tabla dispositivos (que es la tabla padre) pero marca el mismo error
  #11 (permalink)  
Antiguo 27/06/2013, 13:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: query para eliminar en varias tablas

No es tan simple.
Lo que te estoy diciendo es que borres primero aquellas tablas donde las FK apunten a la tabla base, y recién entonces borres las base. Es decir que Falla y EstadoDispositivo deben borrarse primero, y recién entonces puedes borrar dispositivo.

De lo contrario, sólo puedes borrarlas en cascada si defines el ON DELETE CASCADE en esas tablas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 27/06/2013, 14:05
 
Fecha de Ingreso: abril-2013
Mensajes: 29
Antigüedad: 11 años
Puntos: 0
Respuesta: query para eliminar en varias tablas

Cita:
Iniciado por gnzsoloyo Ver Mensaje
No es tan simple.
Lo que te estoy diciendo es que borres primero aquellas tablas donde las FK apunten a la tabla base, y recién entonces borres las base. Es decir que Falla y EstadoDispositivo deben borrarse primero, y recién entonces puedes borrar dispositivo.

De lo contrario, sólo puedes borrarlas en cascada si defines el ON DELETE CASCADE en esas tablas.
Algo como esto?

Código PHP:
public function eliminarDispositivoAdmin($id_respuesta) {
        
$conexion $this->abrirConexion();
        
$consumibleEliminado false;
        
$sentencia "DELETE  b,c FROM  falla AS b JOIN estadoDispositivo AS c
            ON b.id_respuesta=c.id_respuesta  
            WHERE a.id_respuesta = '" 
mysql_real_escape_string($id_respuesta) . "'";
        
$resultado $this->ejecutarConsulta($sentencia$conexion);
     
        
$sentencia "DELETE  FROM dispositivos
              
            WHERE id_respuesta = '" 
mysql_real_escape_string($id_respuesta) . "'";
        
$resultado $this->ejecutarConsulta($sentencia$conexion);
        
        
        if (!
$resultado) {
            
$cerror "Ocurrió un error al acceder a la base de datos.<br>";
            
$cerror .= "SQL: $sentencia <br>";
            
$cerror .= "Descripción: " mysql_error($conexion);
            die(
$cerror);
        } else {
            if (
mysql_affected_rows($conexion) >= 1)
                
$consumibleEliminado true;
        }
        
$this->cerrarConexion($conexion);
        return 
$consumibleEliminado;
    } 
  #13 (permalink)  
Antiguo 27/06/2013, 14:09
 
Fecha de Ingreso: abril-2013
Mensajes: 29
Antigüedad: 11 años
Puntos: 0
Respuesta: query para eliminar en varias tablas

Ok, ya repare el error, habia una a, en el primer query donde elimino falla y estadoDispositivo, y por eso marcaba error, pero ya elimina, muchas gracias gnzsoloyo!!!! haz hecho mi dia :)
  #14 (permalink)  
Antiguo 27/06/2013, 14:22
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: query para eliminar en varias tablas



__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: php+
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 09:51.