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

En un solo proceso UPDATE, DELETE e INSERT

Estas en el tema de En un solo proceso UPDATE, DELETE e INSERT en el foro de Mysql en Foros del Web. Hola amigos, espero que me puedan ayudar y también que esté bien puesto en tema Mysql dentro del foro. Trabajo con PHP. Tengo el siguiente ...
  #1 (permalink)  
Antiguo 13/02/2012, 23:41
 
Fecha de Ingreso: abril-2010
Mensajes: 112
Antigüedad: 14 años, 7 meses
Puntos: 2
Exclamación En un solo proceso UPDATE, DELETE e INSERT

Hola amigos, espero que me puedan ayudar y también que esté bien puesto en tema Mysql dentro del foro.
Trabajo con PHP. Tengo el siguiente problema, tengo un conjunto de datos, donde se utilizan 3 tablas, una la principal, llamada "sesiones_ints". esta tabla tiene dos tablas relacionadas (FK) sesiones_ints_has_idiomas y sesiones_ints_has_servicios. Estoy haciendo el proceso en que modifico la actividad, como tengo los datos de la tabla principal, esos puedo hacer un simple UPDATE, pero cómo hago para actualizar si el usuario sacó un idioma del <select> o si desmarcó un checkbox de la lista de servicios disponibles.

La solución que le quiero dar es un proceso donde:

1) UPDATE los datos de la tabla 'sesiones_ints'.
2) DELETE los registros relacionados al 'id_sesion_int' en la tabla 'sesiones_ints_has_idiomas'.
3) INSERT los valores transmitidos por $_POST en la tabla 'sesiones_ints_has_idiomas'.
Y así sucesivamente con el otro proceso relativo a los servicios.

Pero me da el error "Unknown column 'id_sesion_int' in 'where clause'". (Cosa que está correcto y si elimino el resto de los SQL funciona perfecto).

Intenté probando con mysqli_multi_query, pero creo que es solo para SELECTS.
Me imagino que debería ir algún tipo de transacción, la cual no se cual puede ser

¿Cómo han hecho ustedes el mismo proceso?

Les dejo el código.


Saludos y muchas gracias.

Código PHP:
Ver original
  1. function actualizar {
  2.  
  3. // todos los $_POST respectivos, esta función es llamada del programa principal
  4.  
  5.             $sql="UPDATE sesiones_ints SET
  6.                    nombre_corto = '$ncorto',
  7.                    nombre_largo = '$nlargo',
  8.                    nro_int = '$canint',
  9.                    tematica = '$tema',
  10.                    fecha = '$fechactividad',
  11.                    recinto = '$lugar',
  12.                    direccion_recinto = '$direccion',
  13.                    id_comuna = '$idcomuna',
  14.                    id_region = '$idregion',
  15.                    id_jornada = '$jornada',
  16.                    tarifa_cliente = '$precioint',
  17.                    id_moneda = '$moneda',
  18.                    fecha_modificacion = now(),
  19.                    id_idioma_destino = '$idiomadestino'
  20.                 WHERE id_sesion_int = $id";
  21.    
  22.        
  23.         mysql_query($sql) or exit(mysql_error());
  24.     //2) delete idiomas de sesiones_ints_has_idiomas con id_sesion_int
  25.    
  26.         $sqldel = "DELETE FROM sesiones_ints_has_idiomas WHERE id_sesion_int = $id";
  27.    
  28.                 mysql_query($sqldel) or exit(mysql_error());
  29.  
  30.    //2.1) insert en sesiones_int_has_idiomas los actuales idiomas
  31.    
  32.     $idiomaorigen  = $_POST['recibeidioma'];
  33.  
  34.     foreach ($idiomaorigen as $x){
  35.            
  36.     $sqlidioma=("INSERT INTO sesiones_ints_has_idiomas (
  37.                    sesiones_ints_id_sesion_int, idiomas_id_idiomaç
  38.                    ) VALUES (
  39.                    '$id','$x'
  40.                    )"
  41.                    );
  42.        
  43.      
  44.         mysql_query($sqlidioma) or exit(mysql_error());
  45.     }
  46.        
  47.                
  48.     //3) delete sesiones_ints_has_servicios con id_sesion_int
  49.     $sqldel2 = "DELETE FROM sesiones_ints_has_servicios WHERE id_sesion_int = $id";
  50.        
  51.  
  52.                 mysql_query($sqldel2) or exit(mysql_error());
  53.     //3.1) insert en sesiones_ints_has_servicios los nuevos valores
  54.    
  55.    
  56.     $servelej=$_POST['chkSeleccionar'];
  57.         $cant=$_POST['cantServicio'];  
  58.  
  59.      
  60.     for($i = 0; $i<count($servelej); $i++) {
  61.    
  62.         $sqlserv=("INSERT INTO sesiones_ints_has_servicios (
  63.                id_sesion_int,
  64.                id_servs_provs_ses,
  65.                cant
  66.        ) VALUES (
  67.                '$id',
  68.                '$servelej[$i]',
  69.                '$cant[$i]')");
  70.    
  71.  
  72.         mysql_query($sqlserv) or exit(mysql_error());
  73.        }  
  74.  
  75. }
  #2 (permalink)  
Antiguo 14/02/2012, 00:58
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 14 años, 2 meses
Puntos: 331
Respuesta: En un solo proceso UPDATE, DELETE e INSERT

"Unknown column 'id_sesion_int' in 'where clause'" significa que ese campo no existe en esa tabla. Si todavía tienes dudas utiliza un alias en la tabla para ver qué pasa

$sqldel2 = "DELETE FROM sesiones_ints_has_servicios SHS WHERE SHS.id_sesion_int = $id";
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 14/02/2012, 01:09
 
Fecha de Ingreso: abril-2010
Mensajes: 112
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: En un solo proceso UPDATE, DELETE e INSERT

Grosso, no le di alias, pero revisé el codigo y claro había un error en la tabla relativa a idiomas. pensé que el proceso no era posible, por algún motivo no me gabó los idiomas de forma correcta, pero eso y es harina de otro costal, al menos me realizó el proceso sin problemas.

Saludos y muchas gracias.

Etiquetas: delete, insert, php, proceso, query, registros, select, sql, tabla, update
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 07:26.