Foros del Web » Programando para Internet » PHP »

Update con Inner Join

Estas en el tema de Update con Inner Join en el foro de PHP en Foros del Web. Hola, tengo una duda sobre como realizar un update con un inner join. Tengo una tabla a actualizar pero para actualizar los datos de esa ...
  #1 (permalink)  
Antiguo 01/12/2012, 12:25
Avatar de Suhkha  
Fecha de Ingreso: julio-2012
Mensajes: 65
Antigüedad: 11 años, 8 meses
Puntos: 1
Pregunta Update con Inner Join

Hola, tengo una duda sobre como realizar un update con un inner join.

Tengo una tabla a actualizar pero para actualizar los datos de esa tabla, tomo un dato de otra, es decir.

Tengo tabla empresas y tabla sucursales.

Tabla empresas tiene como id foranea id_sucursales.

Mi query para el update es el siguiente:
Código PHP:
Ver original
  1. $actualizar_nombre_suc = sprintf("UPDATE sucursales SET nombre_sucursal = '".$sucursal_actualizar2."', direccion = '".$direccion_sucursal_actualizar."' , telefono_1 = '".$telefono1_actualizar."', telefono_2 = '".$telefono2_actualizar."', nombre_responsable ='".$responsable_sucursal_actualizar."' ,correo_sucursal = '".$correo_sucursal_actualizar."' , horario_comida_salida = '".$horario_comida_salida_actualizar."', horario_comida_entrada = '".$horario_comida_entrada_actualizar."', horario_entrada = '".$horario_entrada_actualizar."', horario_salida = '".$horario_salida_actualizar."'  inner join empresas ON (empresas.id_sucursales=sucursales.id_sucursales) where sucursales.nombre_sucursal = '$sucursal_actualizar' and empresas.nombre_empresa ='$empresas_a'");
  2.  
  3. $actualizar_n = mysql_query ($actualizar_nombre_suc, $conexion)or die();

Obviamente mi consulta no funciona pero no me ocurre como hacer el inner join en el update. He usado el inner join solo en consulta.

Antes hacia el update solo con la primera condicion de sucursales, pero esto trajo problemas ya que me actualizaba sucursales con el mismo nombre, por eso puse una segunda condicion en donde me actualice la sucursal de la empresa que le indico.

Ya verifique que si estuviera recibiendo las variables, en eso no hay poblema, los valores ahi estan pero el query no funciona ya que no esta bien estructurado.

Me podrian ayudar para saber como hacer bien el query?
Con manzanitas por favor
Gracias!!
__________________
Don't look back, and try learning everyday, no matters how...
  #2 (permalink)  
Antiguo 01/12/2012, 12:45
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: Update con Inner Join

no puedes hacer un update con inner join, eso no tiene sentido, consulte un manual de SQL, lo que puede hacer es traer datos con subconsultas y asignarlos a columnas específicas, pero no puede mezclar operaciones de escritura (update/insert) con lectura (select)
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 01/12/2012, 12:54
Avatar de Suhkha  
Fecha de Ingreso: julio-2012
Mensajes: 65
Antigüedad: 11 años, 8 meses
Puntos: 1
Respuesta: Update con Inner Join

Cita:
Iniciado por maycolalvarez Ver Mensaje
no puedes hacer un update con inner join, eso no tiene sentido, consulte un manual de SQL, lo que puede hacer es traer datos con subconsultas y asignarlos a columnas específicas, pero no puede mezclar operaciones de escritura (update/insert) con lectura (select)
Me dejas en la mismas....
me podrias poner un ejemplo.
Es que realmente no entiendo :S
__________________
Don't look back, and try learning everyday, no matters how...
  #4 (permalink)  
Antiguo 01/12/2012, 13:03
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: Update con Inner Join

En realidad el problema es que el UPDATE está mal escrito para ser usado con un JOIN:
Código SQL:
Ver original
  1. UPDATE
  2.     sucursales S INNER JOIN empresas E ON S.id_sucursales = E.id_sucursales
  3. SET S.nombre_sucursal = '".$sucursal_actualizar2."',
  4.     S.direccion = '".$direccion_sucursal_actualizar."' ,
  5.     S.telefono_1 = '".$telefono1_actualizar."',
  6.     S.telefono_2 = '".$telefono2_actualizar."',
  7.     S.nombre_responsable ='".$responsable_sucursal_actualizar."' ,
  8.     S.correo_sucursal = '".$correo_sucursal_actualizar."' ,
  9.     S.horario_comida_salida = '".$horario_comida_salida_actualizar."',
  10.     S.horario_comida_entrada = '".$horario_comida_entrada_actualizar."',
  11.     S.horario_entrada = '".$horario_entrada_actualizar."',
  12.     S.horario_salida = '".$horario_salida_actualizar."'  
  13. WHERE
  14.     S.nombre_sucursal = '$sucursal_actualizar'
  15.     AND E.nombre_empresa ='$empresas_a';

Un tip: escribe las consultas en forma estructurada, incluso cuando las haces en PHP. No es taaaaan difícil y ayuda a ver los errores con más facilidad:
Código PHP:
Ver original
  1. $query = "UPDATE ";
  2. $query .= "    sucursales S INNER JOIN empresas E ON S.id_sucursales = E.id_sucursales ";
  3. $query .= "SET S.nombre_sucursal = '".$sucursal_actualizar2."', ";
  4. $query .= "    S.direccion = '".$direccion_sucursal_actualizar."' , ";
  5. $query .= "    S.telefono_1 = '".$telefono1_actualizar."', ";
  6. $query .= "    S.telefono_2 = '".$telefono2_actualizar."', ";
  7. $query .= "    S.nombre_responsable ='".$responsable_sucursal_actualizar."' ,";
  8. $query .= "    S.correo_sucursal = '".$correo_sucursal_actualizar."' , ";
  9. $query .= "    S.horario_comida_salida = '".$horario_comida_salida_actualizar."', ";
  10. $query .= "    S.horario_comida_entrada = '".$horario_comida_entrada_actualizar."', ";
  11. $query .= "    S.horario_entrada = '".$horario_entrada_actualizar."', ";
  12. $query .= "    S.horario_salida = '".$horario_salida_actualizar."' ";
  13. $query .= "where ";
  14. $query .= "    S.nombre_sucursal = '$sucursal_actualizar' ";
  15. $query .= "    and E.nombre_empresa ='$empresas_a';";
__________________
¿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 01/12/2012, 13:09
Avatar de Suhkha  
Fecha de Ingreso: julio-2012
Mensajes: 65
Antigüedad: 11 años, 8 meses
Puntos: 1
Respuesta: Update con Inner Join

Cita:
Iniciado por gnzsoloyo Ver Mensaje
En realidad el problema es que el UPDATE está mal escrito para ser usado con un JOIN:
Código SQL:
Ver original
  1. UPDATE
  2.     sucursales S INNER JOIN empresas E ON S.id_sucursales = E.id_sucursales
  3. SET S.nombre_sucursal = '".$sucursal_actualizar2."',
  4.     S.direccion = '".$direccion_sucursal_actualizar."' ,
  5.     S.telefono_1 = '".$telefono1_actualizar."',
  6.     S.telefono_2 = '".$telefono2_actualizar."',
  7.     S.nombre_responsable ='".$responsable_sucursal_actualizar."' ,
  8.     S.correo_sucursal = '".$correo_sucursal_actualizar."' ,
  9.     S.horario_comida_salida = '".$horario_comida_salida_actualizar."',
  10.     S.horario_comida_entrada = '".$horario_comida_entrada_actualizar."',
  11.     S.horario_entrada = '".$horario_entrada_actualizar."',
  12.     S.horario_salida = '".$horario_salida_actualizar."'  
  13. WHERE
  14.     S.nombre_sucursal = '$sucursal_actualizar'
  15.     AND E.nombre_empresa ='$empresas_a';

Un tip: escribe las consultas en forma estructurada, incluso cuando las haces en PHP. No es taaaaan difícil y ayuda a ver los errores con más facilidad:
Código PHP:
Ver original
  1. $query = "UPDATE ";
  2. $query .= "    sucursales S INNER JOIN empresas E ON S.id_sucursales = E.id_sucursales ";
  3. $query .= "SET S.nombre_sucursal = '".$sucursal_actualizar2."', ";
  4. $query .= "    S.direccion = '".$direccion_sucursal_actualizar."' , ";
  5. $query .= "    S.telefono_1 = '".$telefono1_actualizar."', ";
  6. $query .= "    S.telefono_2 = '".$telefono2_actualizar."', ";
  7. $query .= "    S.nombre_responsable ='".$responsable_sucursal_actualizar."' ,";
  8. $query .= "    S.correo_sucursal = '".$correo_sucursal_actualizar."' , ";
  9. $query .= "    S.horario_comida_salida = '".$horario_comida_salida_actualizar."', ";
  10. $query .= "    S.horario_comida_entrada = '".$horario_comida_entrada_actualizar."', ";
  11. $query .= "    S.horario_entrada = '".$horario_entrada_actualizar."', ";
  12. $query .= "    S.horario_salida = '".$horario_salida_actualizar."' ";
  13. $query .= "where ";
  14. $query .= "    S.nombre_sucursal = '$sucursal_actualizar' ";
  15. $query .= "    and E.nombre_empresa ='$empresas_a';";
Gracias por responder.
Tengo una duda sobre lo que pusiste, ¿la variable $query va en cada linea?
Y las letras S y E son identificadores para no estar poniendo sucursales y empresas?

Saludos!
__________________
Don't look back, and try learning everyday, no matters how...
  #6 (permalink)  
Antiguo 01/12/2012, 13:29
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 18 años, 11 meses
Puntos: 839
Respuesta: Update con Inner Join

Cita:
Iniciado por Suhkha Ver Mensaje
Tengo una duda sobre lo que pusiste, ¿la variable $query va en cada linea?
De la forma en que te indicó gnzsoloyo, sí. También podría ser de esta forma:
Código PHP:
Ver original
  1. $query = "
  2.    UPDATE
  3.        sucursales S INNER JOIN empresas E ON S.id_sucursales = E.id_sucursales
  4.        SET    S.nombre_sucursal = '$sucursal_actualizar2',
  5.            S.direccion = '$direccion_sucursal_actualizar',
  6.            S.telefono_1 = '$telefono1_actualizar',
  7.            S.telefono_2 = '$telefono2_actualizar',
  8.            S.nombre_responsable ='$responsable_sucursal_actualizar',
  9.            S.correo_sucursal = '$correo_sucursal_actualizar',
  10.            S.horario_comida_salida = '$horario_comida_salida_actualizar',
  11.            S.horario_comida_entrada = '$horario_comida_entrada_actualizar',
  12.            S.horario_entrada = '$horario_entrada_actualizar',
  13.            S.horario_salida = '$horario_salida_actualizar'
  14.        WHERE
  15.            S.nombre_sucursal = '$sucursal_actualizar'
  16.            AND E.nombre_empresa ='$empresas_a'
  17. ";
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 01/12/2012, 13:41
Avatar de Suhkha  
Fecha de Ingreso: julio-2012
Mensajes: 65
Antigüedad: 11 años, 8 meses
Puntos: 1
Respuesta: Update con Inner Join

Cita:
Iniciado por David Ver Mensaje
De la forma en que te indicó gnzsoloyo, sí. También podría ser de esta forma:
Código PHP:
Ver original
  1. $query = "
  2.    UPDATE
  3.        sucursales S INNER JOIN empresas E ON S.id_sucursales = E.id_sucursales
  4.        SET    S.nombre_sucursal = '$sucursal_actualizar2',
  5.            S.direccion = '$direccion_sucursal_actualizar',
  6.            S.telefono_1 = '$telefono1_actualizar',
  7.            S.telefono_2 = '$telefono2_actualizar',
  8.            S.nombre_responsable ='$responsable_sucursal_actualizar',
  9.            S.correo_sucursal = '$correo_sucursal_actualizar',
  10.            S.horario_comida_salida = '$horario_comida_salida_actualizar',
  11.            S.horario_comida_entrada = '$horario_comida_entrada_actualizar',
  12.            S.horario_entrada = '$horario_entrada_actualizar',
  13.            S.horario_salida = '$horario_salida_actualizar'
  14.        WHERE
  15.            S.nombre_sucursal = '$sucursal_actualizar'
  16.            AND E.nombre_empresa ='$empresas_a'
  17. ";
Gracias, ya hice lo que me dijeron mas sin embargo sigue sin actualizar.

Le agregue esta linea despues del query:
Código PHP:
Ver original
  1. $actualizar_n = mysql_query ($query, $conexion)or die (mysql_error());

Y me arroja este error:
Unknown column 'clientes.id_sucursales�' in 'on clause'
__________________
Don't look back, and try learning everyday, no matters how...
  #8 (permalink)  
Antiguo 01/12/2012, 13:42
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 18 años, 11 meses
Puntos: 839
Respuesta: Update con Inner Join

Te dice que ese campo no existe. Por cierto, en la consulta original que publicaste yo no veo por ningún lado esa tabla clientes.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #9 (permalink)  
Antiguo 01/12/2012, 13:44
Avatar de Suhkha  
Fecha de Ingreso: julio-2012
Mensajes: 65
Antigüedad: 11 años, 8 meses
Puntos: 1
Respuesta: Update con Inner Join

Cita:
Iniciado por David Ver Mensaje
Te dice que ese campo no existe. Por cierto, en la consulta original que publicaste yo no veo por ningún lado esa tabla clientes.
Perdon era E.id_sucursales, pero entonces a que se debera porque en la tabla de empresas si tengo la llave foranea de id_sucursales.

:/

Gracias por responder

Actualizacion: Ya revise el query, por fin actualizo, fue error de dedo mio!

Gracias por su ayuda!!

Saludos!! :)
__________________
Don't look back, and try learning everyday, no matters how...

Etiquetas: 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 05:10.