Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/02/2012, 23:41
Ojopex2
 
Fecha de Ingreso: abril-2010
Mensajes: 112
Antigüedad: 14 años, 1 mes
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. }