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

necesito insertar y eliminar

Estas en el tema de necesito insertar y eliminar en el foro de Mysql en Foros del Web. Hola!!! bueno yo necesito eliminar un registro, y ala ves insertarlo, es decir yo tengo una tabla llamada area_documento, y en esa tabal tiene el ...
  #1 (permalink)  
Antiguo 10/10/2011, 08:18
Avatar de JeMaGa  
Fecha de Ingreso: julio-2011
Ubicación: Bogota
Mensajes: 430
Antigüedad: 12 años, 9 meses
Puntos: 4
necesito insertar y eliminar

Hola!!! bueno yo necesito eliminar un registro, y ala ves insertarlo, es decir yo tengo una tabla llamada area_documento, y en esa tabal tiene el codigo del documeto(Cod.Doc) y el area correspondiente al documento(Cod.Area), yo necesito que me elimine las areas anteriores y me inserte en la misma tabla las nuevas areas, y tengo estas sentencias en php, pero el problema es que me elimina todas las que hay pero solo me toma el ultimo valor!!! por que?? y si quito el delete si me inserta todas las areas!!!

Código MySQL:
Ver original
  1. $del = mysql_query("DELETE FROM `area_documento` WHERE `Cod.Doc` in ('{$Codigo}','{$val}')", $Conexion) or die (mysql_error());
  2.            
  3. $insert = mysql_query("INSERT INTO `area_documento`(`Cod.Doc`,`Cod.Area`) VALUES('{$Codigo}','{$val}')", $Conexion) or die (mysql_error());

Depronto estoy equivocada secion pero agradezo toda la ayuda!!
  #2 (permalink)  
Antiguo 10/10/2011, 08:24
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: necesito insertar y eliminar

Elimina todas porque tienes más de un registro donde se cumplen, por lo que la eliminación abarca a todas. Pero un INSERT es individual. SIEMPRE.
Si tienes que ingresar más de un registro, debes entonces construir o un INSERT múltiple, o hacer múltiples INSERTs.

En el primer caso es un
Código MySQL:
Ver original
  1. INSERT INTO `area_documento`(`Cod.Doc`,`Cod.Area`)
  2. VALUES('$Codigo','$val'), ('$Codigo','$val'), ('$Codigo','$val'), ('$Codigo','$val');
donde cada conjunto de VALUES se correspondería a un par a insertar. Obviamente se tiene que construir programáticamente, o insertarás valores iguales en todos los caso.

El otro es similar. Tienes que iterar una a una las inserciones, programáticamente, y ejecutar una a una. La diferencia es de performance: Con un INSERT múltiple puedes mandar al buffer un millar de valores que se ejecutan masivamente, mientras que en el segundo las inserciones se ejecutan de a una.
__________________
¿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 10/10/2011, 08:35
Avatar de JeMaGa  
Fecha de Ingreso: julio-2011
Ubicación: Bogota
Mensajes: 430
Antigüedad: 12 años, 9 meses
Puntos: 4
Respuesta: necesito insertar y eliminar

la idea es eliminar todas las correspondientes al documento, y luego insertar unas nuevas,
digamos yo tengo

Cod.Doc--->MAN-01A4 Cod.Area---> 1,2,3,4 dato existente

Cod.Doc--->MAN-01A4 Cod.Area---> 5,4,2,6 dato nuevo

entonces eliminar la primera(existente), e ingresar inmediatamente los nuevos
  #4 (permalink)  
Antiguo 10/10/2011, 08:47
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: necesito insertar y eliminar

Sigue siendo como te digo. Es un sólo DELETE y un INSERT múltiple creado por programación.
¿Cúal es el problema que te produce?
Si es cómo crear el script de PHP, ese es tema de otro foro, el Foro de PHP.
__________________
¿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 10/10/2011, 09:34
Avatar de JeMaGa  
Fecha de Ingreso: julio-2011
Ubicación: Bogota
Mensajes: 430
Antigüedad: 12 años, 9 meses
Puntos: 4
Respuesta: necesito insertar y eliminar

el problema es que no funciona el delete
  #6 (permalink)  
Antiguo 10/10/2011, 10:50
Avatar de JeMaGa  
Fecha de Ingreso: julio-2011
Ubicación: Bogota
Mensajes: 430
Antigüedad: 12 años, 9 meses
Puntos: 4
Respuesta: necesito insertar y eliminar

y pruebo una por una y si funciona, pero juntas no, que hago por que!!!!
  #7 (permalink)  
Antiguo 10/10/2011, 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: necesito insertar y eliminar

¿No funciona en qué sentido? ¿No borra todo?
Ten en cuenta que si los identificadores a borrar no están bien definidos, no borrará todo, sino sólo lo que cumpla.
El DELETE que tienes definido implica que comparas dos datos diferentes (Codigo y Valor) contra un mismo campo de la tabla. Eso no parece correcto, ya que luego pones esos dos valores en campos distintos.
__________________
¿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 10/10/2011, 11:24
Avatar de JeMaGa  
Fecha de Ingreso: julio-2011
Ubicación: Bogota
Mensajes: 430
Antigüedad: 12 años, 9 meses
Puntos: 4
Respuesta: necesito insertar y eliminar

Código PHP:
Ver original
  1. $del = mysql_query("DELETE FROM `area_documento` WHERE `Cod.Doc` in ('{$Codigo}')", $Conexion) or die (mysql_error());
  2.            
  3. $consultica = mysql_query("insert into `area_documento` (`Cod.Doc`,`Cod.Area`) values('{$Codigo}','{$val}')", $Conexion) or die (mysql_error());

si ejecuto el de eliminar me elimina, y si ejecuto el de insertar me inserta todos los datos, es decir todas la areas, PERO cuando ejecuto las 2 al mismo tiempo me elimina pero solo me inserta un valor!!!, en ves de los 3 que le paso, en esta caso solo me toma el ultimo valor!!!! ingresado!!! por que??/?
  #9 (permalink)  
Antiguo 10/10/2011, 11:37
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: necesito insertar y eliminar

No me queda muy claro cómo haces para borrar e insertar al mismo tiempo, pero esencialmente, si son operaciones concurrentes puede suceder que mientras estés insertando registros, se estén borrando al mismo tiempo, si ambos eventos ocurren usando hilos distintos.
Razónalo de este modo: Si las operaciones, ejecutadas secuencialmente, tienen el resultado correcto, pero ejecutadas en concurrencia no, el problema está dado por la concurrencia y no por la consulta en sí...
Si el conflicto se produce por ser operaciones concurrentes, la solución es relativamente sencilla: Si usas tablas de tipo InnoDB lo que debes hacer es escalar cada una de estas operaciones en una transacción, de modo que el borrado se complete antes de que se comiencen a ejecutar las inserciones.

¿Se entiende la idea?
__________________
¿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 10/10/2011, 13:01
Avatar de JeMaGa  
Fecha de Ingreso: julio-2011
Ubicación: Bogota
Mensajes: 430
Antigüedad: 12 años, 9 meses
Puntos: 4
Respuesta: necesito insertar y eliminar

mmm muy claro no me queda, pero si utilizo tablas de tipo InnoDB, sera que me puedes explicar como hago loq ue me indicaste gracias
  #11 (permalink)  
Antiguo 13/10/2011, 07:37
Avatar de JeMaGa  
Fecha de Ingreso: julio-2011
Ubicación: Bogota
Mensajes: 430
Antigüedad: 12 años, 9 meses
Puntos: 4
Respuesta: necesito insertar y eliminar

listo aqui dejo la solucion muchas gracias a todos!!! por la ayuda.

Código PHP:
Ver original
  1. //Se resive el arreglo con los valores del checkbox.
  2.           $val_chk= $_REQUEST['Area'];
  3.  
  4.             //Se realiza un delete a la base de datos en la tabla `area_documento`.
  5.             $del = "delete from `area_documento`  where `Cod.Doc` in('{$Codigo}')";
  6.             mysql_query($del) or die (mysql_error());
  7.  
  8.             //Se agrega una consulta para verificar si se eliminaron los datos y si se cumple la condición ejecute el insert.
  9.             $veri = "select *  from `area_documento` where `Cod.Doc`in('{$Codigo}')";
  10.  
  11.             $resultado = mysql_query($veri) or die (mysql_error());
  12.            
  13.             //Devuelve el numero total de filas afectadas.
  14.             $total = mysql_num_rows($resultado);
  15.  
  16.             //Se crea una condicion la cual va dar como resultado 0, ya que se eliminaron todos los datos segun el documento.
  17.             if($total < 1)
  18.                 {
  19.                
  20.                 //Se crea un foreach para que este recorra el arreglo.
  21.                 foreach ($val_chk as $val ){
  22.            
  23.                     //Se indica que realize una insercion, en la base de datos. se pasa como valores el codigo y las areas
  24.                     $insert=mysql_query("insert into `area_documento`(`Cod.Doc`,`Cod.Area`) values('{$Codigo}','{$val}')", $Conexion) or die (mysql_error());
  25.                
  26.                 }
  27.  
  28.            }

Etiquetas: php, query, sql, tabla
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:25.